實作欄位選擇模式的 Gin-Gonic 中介軟體
在我的公司,我們使用 Go 來建立內部工具。最近,我使用 gin-gonic 開發 REST API,這需要在多個端點顯示大量資料。
在這種類型的場景中必須具有的功能是分頁,但經常被忽略的模式是部分回應(又稱欄位選擇)。這也是一個非常好的補充,可以過濾掉網頁伺服器回應中的資料量。
首先讓我們明確一下欄位選擇的意思。想像一下您有以下端點:
// > GET /api/products [ { "id": 1, "createdAt": "2024-18-11", "updatedAt": "2024-18-11", "code": "1", "price": { "amount": 100, "currency": "EUR" }, "manufacturedBy": "myshop", "stock": 552, ... }, ... ]
使用部分回應,客戶端可以使用欄位查詢參數過濾輸出,例如
// > GET /api/products?fields=code,price [ { "code": "1", "price": { "amount": 100, "currency": "EUR" } }, ... ]
僅傳回查詢參數中宣告的欄位。減少有效負載大小並節省頻寬。
我找不到任何可用於此模式的實現,因此我決定自己創建它,這就是 Milogo 的誕生。
Milogo 是一個 Gin 中間件,用於處理 API 回應,過濾出 fields 查詢參數中指定的字段,並僅傳回請求的資料。
一些可用的主要功能:
支援 json 物件和 json 陣列。
因此,Milogo 可以過濾以一組項目或僅以一個項目開頭的 JSON 回應欄位。
支援過濾巢狀 json 物件中的欄位。
Milogo 也支援過濾具有以下格式的嵌套 JSON 對象,例如代碼,價格(金額)
支援將 json 包裹在另一個 json 中。
有時 JSON 回應會包裝在另一個 JSON 物件中,Milogo 支援過濾實際負載(請參閱包裝範例):
// GET /products?fields=code,price(amount) { "data": [ { "code": 1, "price": { "amount": 100 } }, ... ], "_metadata": { ... } }
與任何杜松子酒中間件一樣,Milogo 非常易於使用和設置,您可以按照 github 存儲庫中的 README 進行操作,但基本上:
r := gin.Default() r.Use(Milogo())
足以將 Milogo 中間件添加到您的 api。
在前面的範例中,Milogo 應用於每個端點,但也可以僅應用於一組端點,或僅應用於特定端點,例如
group := r.Group("/products", milogo.Milogo()) group.GET("", productsHandler)
在前面的範例中,只有 /products 群組才會套用 Milogo 的中間件。
Milogo 旨在簡化 REST API 開發並改善客戶端-伺服器互動。查看 GitHub 儲存庫以取得範例和文件。
請隨時聯繫或貢獻 — 讓我們一起提升 REST API 的效率!
以上是使用 Milogo for Gin-Gonic 簡化您的 REST API 回應的詳細內容。更多資訊請關注PHP中文網其他相關文章!