フィールド選択パターンを実装するGin-Gonicミドルウェア
私の会社では Go を使用して内部ツールを構築しています。最近、gin-gonic を使用して REST API で作業しましたが、これには多くのエンドポイントにわたって大量のデータを表示する必要がありました。
このタイプのシナリオで必須の機能の 1 つは ページネーション ですが、見落とされがちなパターンは 部分応答 (別名フィールド選択) です。これは、Web サーバーの応答に含まれるデータ量をフィルターで除外するための非常に優れた追加機能でもあります。
まず、フィールド選択について私が何を意味するのかを明確にしましょう。次のエンドポイントがあると想像してください:
// > 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 は、API 応答を処理し、fields クエリ パラメーターで指定されたフィールドをフィルターで除外し、要求されたデータのみを返す Jin ミドルウェアです。
利用可能な主な機能の一部:
json オブジェクトと json 配列のサポート。
したがって、Milogo は、項目の配列または 1 つの項目だけで始まる JSON 応答のフィールドをフィルターできます。
ネストされた JSON オブジェクト内のフィールドのフィルタリングのサポート。
Milogo は、次の形式でネストされた JSON オブジェクトのフィルタリングもサポートしています。コード、価格(金額)
別の json でラップされた json のサポート。
JSON 応答が別の JSON オブジェクトでラップされる場合があります。Milogo は実際のペイロードのフィルタリングをサポートしています (ラップされた例を参照):
// GET /products?fields=code,price(amount) { "data": [ { "code": 1, "price": { "amount": 100 } }, ... ], "_metadata": { ... } }
他の gin ミドルウェアと同様に、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 を効率的にしましょう!
以上がGin-Gonic の Milogo を使用して REST API レスポンスを簡素化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。