GraphQL 之 Filtering, Sorting, Pagination, Projections

GraphQL 的價值就在會依 Filtering, Sorting, Pagination, Projections 自動組織後端查詢程式碼。

引言

GraphQL 的價值就在會依 Filtering(過濾), Sorting(排序), Pagination(分頁), Projections(投影) 自動組織後端查詢程式碼。這幾項功能是不用再加碼就可以實現。

經過數次的迭代,就 Hot Chocolatearrow-up-right 來說可以輕鬆的就實現,當然還是有些前題條件的。軟體規範設計的越玄實作就越難。GraphQL 的規範就很玄那是怎麼做到的,這應該歸功於 LINQ 的動態性,Hot Chocolate 就是基於 LINQ IQueryable 介面arrow-up-right實現的。

這四個項目的實作都在後端,前端只要會下規範好的指令即可。


Projections(投影) / UseProjection

其中比較特別的是 Projections(投影)。Projections 的作用是優化後端查詢指令,沒有實作並不會影嚮邏輯上的結果。它優化的部份是去除查詢過程中自動排除不需要的欄位,減少不必要的資料流量。在組織 Projections 之前會取該 table 全部的欄位;Projections 之後只取該 table 需要的部份。

範例:若有一 GrqphQL query 我們只要3個欄位: id, name, city。如下:

query {
  user {
    id,
    name,
    addrsss {
      city
    }
  }
}

在 Projections 之前,對映到後端的 DB Query 指令是

在 Projections 之後變成

Projection 實務上資料來源若是映射 DB → ORM → LINQ → GrqphQL ,那這個 Projections 作用就很明顯。而若是自訂的資料來源的話意義就不大。

直接映射資料庫

Hot Chocolatearrow-up-right 來說有支援數種資料庫 Entiy Framework Core, MongoDB, Neo4J 等,只要組織好就能進行 GraphQL query 不必再寫 query 程式碼。

直接映射資料庫

參考文件

各別的說明請直接參考官方說明。


Filtering / UseFiltering - GraphQL 規範

從練習的範例來看。進一步的再去查文件。

Graph Schema - about filter (後端)

GraphQL query - about filter (前端)

Sorting / UseSorting - GraphQL 規範

從練習的範例來看。進一步的再去查文件。

Graph Schema - about filter (後端)

Graph query - about filter (前端)

Pagination / UsePaging - GraphQL 規範

從練習的範例來看。進一步的再去查文件。

Graph Schema - about filter (後端)

Graph query - about filter (前端)


實作環境

平台: .NET6 IDE: Visual Studio 2022 框架: Blazor Server App GraphQL 套件: Hot Chocolatearrow-up-right v13.8.1

實作紀錄(關鍵程式碼)

實作上這四種可以同時混用,但需遵守順序。

實作 Filtering, Sorting, Pagination 都是後端的工作。經過數次的迭代,就 Hot Chocolatearrow-up-right 來說可以輕鬆的就實現,只要掛上相應的 middleware / attribute 就完成了。

首先安裝套件 HotChocolate.Data

在 Program.cs 註冊

加掛 Filtering, Sorting, Pagination, Projections

triangle-exclamation

完整程式碼

(EOF)

Last updated