DataPower API Gateway のみ

クライアント 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 に表示されるポリシーは、以下のとおりです。最初の switch ケースのレート制限ポリシーを示す画面キャプチャー

    このレート制限ポリシーは、/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.officesfilter 引数内の値 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.offices 1.0 1 x 1.0 = 1.0
        Office.address 2.0 3 x 3.0 = 9.0
        Address.street 0.0 0.0
          合計コスト: 1.0 + 9.0 + 0.0 = 10.0
      • graphql-type-cost:

        照会によって返されるタイプの重みづけされた合計。 スカラー・タイプまたは列挙タイプの重みは 0.0 であるため、タイプ (型) のコストには影響しません。

        上記の例を考慮し、すべてのタイプのデフォルトの重みが 1.0 であると想定すると、合計のタイプのコストは 7 (1 x Query タイプ + 3 x Office タイプ + 3 x Address タイプ) になります。

      • graphql-input-type-cost:

        照会で送信される入力タイプの重みづけされた合計。 スカラー入力タイプまたは列挙入力タイプの重みは 0.0 であるため、入力タイプのコストには影響しません。

        前の例を考慮すると、入力タイプのコストは 1.0 です。これは、filter 引数内で 1 つの FilterInput タイプが送信されるためです。 FilterInput.locationString タイプ、FilterInput.maxInt タイプです。したがって、これらはスカラーであるため、含まれません。

    • ポリシー 2:
      プロパティー
      ソース 名前順のプラン
      レート制限名 graphql-type-cost
      操作 補充
      レート制限名 graphql-field-cost
      操作 補充

      このレート制限ポリシーは、照会の実際のコストを計算し、それに応じて、構成された合計コスト制限のうち、残っている使用可能コスト量を減らすことによって、GraphQL プロキシー API の呼び出しを制限します。 実際のコストは、 GraphQL スキーマのタイプおよびフィールドに付加された加重係数を適用して計算されます。詳しくは、 GraphQL スキーマ・エディターの使用を参照してください。

      実際のコストが予想コストより少ない場合、このレート制限ポリシーは、ポリシー 1 によって削除された使用可能コスト残量の一部を適宜復元し、それにより、元の実際のコスト制限をオーバーライドします。 例えば、バックエンド・データベースで使用可能なデータより多くのデータが照会で要求された場合、実際のコストが予想コストより少なくなる可能性があります。 必要であれば、これらのレート制限ポリシーのいずれかをアセンブリーから削除できます。
      注: GraphQL 応答エラーがある場合、このような未使用コストは復元 されません 。 この制限は、少量のコストのみを使用して大量の誤ったバックエンド処理を引き起こす悪意のある要求を防止することを目的としています。

      実際のコストは、レート制限ポリシーに先行する妥当性検査ポリシーによって計算され、レート制限ポリシーで使用できるように API コンテキストに配置されます。 妥当性検査ポリシーについて詳しくは、 妥当性検査を参照してください。

    アセンブリー UI に表示されるポリシーは、以下のとおりです。2 番目の switch ケースのレート制限ポリシーを示す画面キャプチャー

  • switch の場合:
    ($operationPath() = '/graphql/cost' and message.attributes.parse.GraphQLIntrospection = 'not-introspection')
    以下のプロパティー設定を持つ単一のレート制限ポリシー:
    プロパティー
    ソース 名前順のプラン
    レート制限名 graphql-design-request
    操作 利用
    アセンブリー UI に表示されるポリシーは、以下のとおりです。
    3 番目の switch ケースのレート制限ポリシーを示す画面キャプチャー

    このレート制限ポリシーは、GraphQL 照会のコストを取得するために /graphql/cost エンドポイントに送信される要求を制限します。

  • switch の場合:
    ($operationPath() = '/graphql' and message.attributes.parse.GraphQLIntrospection = 'standard-introspection')
    以下のプロパティー設定を持つ単一のレート制限ポリシー:
    プロパティー
    ソース 名前順のプラン
    レート制限名 graphql-design-request
    操作 利用
    アセンブリー UI に表示されるポリシーは、以下のとおりです。
    4 番目の switch ケースのレート制限ポリシーを示す画面キャプチャー

    このレート制限ポリシーは、/graphql エンドポイントに送信される標準イントロスペクション要求を制限します。

これらのポリシー内のレート制限名の設定で参照されるレート制限は、1 つ以上の GraphQL プロキシー API を含む製品で作成されるプランの中で事前定義されます。 そこで実際のレート制限値を構成できます。詳しくは、 ドラフト製品の編集を参照してください。

レート制限ポリシーについて詳しくは、 レート制限を参照してください。