クライアント ID を使用した GraphQL API の保護
GraphQL プロキシー API の作成時に 「クライアント ID を使用した保護」 オプションを選択した場合、 API Connect は API アセンブリーにレート制限ポリシーを自動的に追加します。
このセクションでは、自動的に生成されるレート制限ポリシー構成について詳しく説明します。 作成時に「クライアント ID を使用した保護」オプションを選択せず、後で有効にする必要が生じた場合、適切なレート制限ポリシーを API アセンブリーに手動で追加する必要があります。
自動生成されたレート制限ポリシーは、以下のように、アセンブリー内の switch ケースに追加されます。
switchの場合:($operationPath() = '/graphql' and message.attributes.parse.GraphQLIntrospection = 'not-introspection' and message.attributes.graphql.operationType = 'subscription')以下のプロパティー設定を持つ単一のレート制限ポリシー:プロパティー 値 ソース 名前順のプラン カウント制限名 graphql-subscription-type-cost 操作 増分 カウント制限名 graphql-subscription-field-cost 操作 増分 アセンブリー UI に表示されるポリシーは、以下のとおりです。

このレート制限ポリシーは、
/graphqlエンドポイントに送信される GraphiQL エディターの HTML Web ブラウザー要求の数を制限します。switchの場合:($operationPath() = '/graphql' and message.attributes.parse.GraphQLIntrospection = 'not-introspection' and message.attributes.graphql.operationType != 'subscription')以下のプロパティー設定を持つ 2 つのレート制限ポリシー:
- ポリシー 1:
プロパティー 値 ソース 名前順のプラン レート制限名 graphql-type-cost 操作 利用 レート制限名 graphql-field-cost 操作 利用 レート制限名 graphql-input-type-cost 操作 利用 このレート制限ポリシーは、照会の予想コストを計算し、それに応じて、構成された合計コスト制限のうち、残っている使用可能コスト量を減らすことによって、GraphQL プロキシー API の呼び出しを制限します。 予期されるコストは、 GraphQL スキーマのタイプおよびフィールドに付加された加重係数を適用することによって計算されます。詳しくは、 GraphQL スキーマ・エディターの使用を参照してください。
予想コストは、レート制限ポリシーに先行する妥当性検査ポリシーによって計算され、レート制限ポリシーで使用できるように API コンテキストに配置されます。 妥当性検査ポリシーについて詳しくは、 妥当性検査を参照してください。
参照されたレート制限が適用されるコスト計算の詳細は、以下のとおりです。
graphql-field-cost: 照会で選択されているフィールドの重みづけされた合計。 スカラー・タイプまたは列挙タイプの値を返すフィールドの重みは 0.0 であるため、フィールド・コストには影響しません。例えば、次の照会について考えてみます。この場合、フィールドQuery.officesのfilter引数内の値maxが、返されるOfficeオブジェクトの数を制約することが想定されています。query { offices (filter: {location: "NY", max: 3}) { address { street } } }Address.streetフィールドのタイプはStringであるため、重みは 0.0 です。 GraphQL スキーマ・エディターで変更されない非スカラー・フィールドと非列挙フィールドの重みでは、デフォルト値 1.0 が想定されます。Office.addressフィールドの重みが 3.0 に設定されている場合、合計フィールド・コストは 10.0 であり、これは次のように計算されます。フィールド ウェイト フィールド・コスト Query.offices1.0 1 x 1.0 = 1.0 Office.address2.0 3 x 3.0 = 9.0 Address.street0.0 0.0 合計コスト: 1.0 + 9.0 + 0.0 = 10.0 graphql-type-cost:照会によって返されるタイプの重みづけされた合計。 スカラー・タイプまたは列挙タイプの重みは 0.0 であるため、タイプ (型) のコストには影響しません。
上記の例を考慮し、すべてのタイプのデフォルトの重みが 1.0 であると想定すると、合計のタイプのコストは 7 (1 x
Queryタイプ + 3 xOfficeタイプ + 3 xAddressタイプ) になります。graphql-input-type-cost:照会で送信される入力タイプの重みづけされた合計。 スカラー入力タイプまたは列挙入力タイプの重みは 0.0 であるため、入力タイプのコストには影響しません。
前の例を考慮すると、入力タイプのコストは 1.0 です。これは、
filter引数内で 1 つのFilterInputタイプが送信されるためです。FilterInput.locationはStringタイプ、FilterInput.maxはIntタイプです。したがって、これらはスカラーであるため、含まれません。
- ポリシー 2:
プロパティー 値 ソース 名前順のプラン レート制限名 graphql-type-cost 操作 補充 レート制限名 graphql-field-cost 操作 補充 このレート制限ポリシーは、照会の実際のコストを計算し、それに応じて、構成された合計コスト制限のうち、残っている使用可能コスト量を減らすことによって、GraphQL プロキシー API の呼び出しを制限します。 実際のコストは、 GraphQL スキーマのタイプおよびフィールドに付加された加重係数を適用して計算されます。詳しくは、 GraphQL スキーマ・エディターの使用を参照してください。
実際のコストが予想コストより少ない場合、このレート制限ポリシーは、ポリシー 1 によって削除された使用可能コスト残量の一部を適宜復元し、それにより、元の実際のコスト制限をオーバーライドします。 例えば、バックエンド・データベースで使用可能なデータより多くのデータが照会で要求された場合、実際のコストが予想コストより少なくなる可能性があります。 必要であれば、これらのレート制限ポリシーのいずれかをアセンブリーから削除できます。注: GraphQL 応答エラーがある場合、このような未使用コストは復元 されません 。 この制限は、少量のコストのみを使用して大量の誤ったバックエンド処理を引き起こす悪意のある要求を防止することを目的としています。実際のコストは、レート制限ポリシーに先行する妥当性検査ポリシーによって計算され、レート制限ポリシーで使用できるように API コンテキストに配置されます。 妥当性検査ポリシーについて詳しくは、 妥当性検査を参照してください。
アセンブリー UI に表示されるポリシーは、以下のとおりです。

- ポリシー 1:
switchの場合:($operationPath() = '/graphql/cost' and message.attributes.parse.GraphQLIntrospection = 'not-introspection')以下のプロパティー設定を持つ単一のレート制限ポリシー:プロパティー 値 ソース 名前順のプラン レート制限名 graphql-design-request 操作 利用 アセンブリー UI に表示されるポリシーは、以下のとおりです。
このレート制限ポリシーは、GraphQL 照会のコストを取得するために
/graphql/costエンドポイントに送信される要求を制限します。switchの場合:($operationPath() = '/graphql' and message.attributes.parse.GraphQLIntrospection = 'standard-introspection')以下のプロパティー設定を持つ単一のレート制限ポリシー:プロパティー 値 ソース 名前順のプラン レート制限名 graphql-design-request 操作 利用 アセンブリー UI に表示されるポリシーは、以下のとおりです。
このレート制限ポリシーは、
/graphqlエンドポイントに送信される標準イントロスペクション要求を制限します。
これらのポリシー内のレート制限名の設定で参照されるレート制限は、1 つ以上の GraphQL プロキシー API を含む製品で作成されるプランの中で事前定義されます。 そこで実際のレート制限値を構成できます。詳しくは、 ドラフト製品の編集を参照してください。
レート制限ポリシーについて詳しくは、 レート制限を参照してください。