リゾルバーの HTTP データ ソース
適用対象: すべての API Management レベル
http-data-source
リゾルバー ポリシーは、GraphQL スキーマ内のオブジェクト タイプとフィールドのデータを解決するために HTTP 要求を構成し、必要に応じて HTTP 応答を構成します。 スキーマは API Management に GraphQL API としてインポートする必要があります。
Note
ポリシーの要素と子要素を、ポリシー ステートメントで指定された順序で設定します。 API Management ポリシーを設定または編集する方法について説明します。
ポリシー ステートメント
<http-data-source>
<http-request>
<get-authorization-context>...get-authorization-context policy configuration...</get-authorization-context>
<set-backend-service>...set-backend-service policy configuration...</set-backend-service>
<set-method>...set-method policy configuration...</set-method>
<set-url>URL</set-url>
<include-fragment>...include-fragment policy configuration...</include-fragment>
<set-header>...set-header policy configuration...</set-header>
<set-body>...set-body policy configuration...</set-body>
<authentication-certificate>...authentication-certificate policy configuration...</authentication-certificate>
</http-request>
<backend>
<forward-request>...forward-request policy configuration...</forward-request>
<http-response>
<set-body>...set-body policy configuration...</set-body>
<xml-to-json>...xml-to-json policy configuration...</xml-to-json>
<find-and-replace>...find-and-replace policy configuration...</find-and-replace>
<publish-event>...publish-event policy configuration...</publish-event>
<include-fragment>...include-fragment policy configuration...</include-fragment>
</http-response>
</http-data-source>
要素
名前 | 説明 | 必須 |
---|---|---|
http-request | リゾルバーの HTTP 要求を構成する URL ポリシーと子ポリシーを指定します。 | はい |
バックエンド | 必要に応じて、リゾルバーの HTTP 要求をバックエンド サービスに転送します (指定されている場合)。 | いいえ |
http-response | 必要に応じて、リゾルバーの HTTP 応答を構成する子ポリシーを指定します。 指定しない場合、応答は生文字列として返されます。 | No |
http-request 要素
Note
特に明記されている場合を除き、各子要素は最大で 1 回指定できます。 リストされている順序で要素を指定します。
要素 | 説明 | 必須 |
---|---|---|
認可コンテキストの取得 | リゾルバーの HTTP 要求の承認コンテキストを取得します。 | いいえ |
set-backend-service | リゾルバーの HTTP 要求を指定されたバックエンドにリダイレクトします。 | いいえ |
include-fragment | ポリシー定義にポリシー フラグメントを挿入します。 複数のフラグメントがある場合は、追加の include-fragment 要素を追加します。 |
いいえ |
set-method | リゾルバーの HTTP 要求のメソッドを設定します。 | はい |
set-url | リゾルバーの HTTP 要求の URL を設定します。 | Yes |
set-header | リゾルバーの HTTP 要求のヘッダーを設定します。 複数のヘッダーがある場合は、追加の header 要素を追加します。 |
No |
set-body | リゾルバーの HTTP 要求の本文を設定します。 | No |
authentication-certificate | リゾルバーの HTTP 要求でクライアント証明書を使用して認証します。 | No |
backend 要素
要素 | 説明 | 必須 |
---|---|---|
forward-request | リゾルバーの HTTP 要求を構成済みのバックエンド サービスに転送します。 | No |
http-response 要素
注意
特に明記されている場合を除き、各子要素は最大で 1 回指定できます。 リストされている順序で要素を指定します。
名前 | 説明 | 必須 |
---|---|---|
set-body | リゾルバーの HTTP 応答の本文を設定します。 | No |
xml-to-json | リゾルバーの HTTP 応答を XML から JSON に変換します。 | No |
find-and-replace | リゾルバーの HTTP 応答で部分文字列を検索し、別の部分文字列に置き換えます。 | No |
publish-event | GraphQL API スキーマで指定された 1 つ以上のサブスクリプションにイベントを発行します。 | いいえ |
include-fragment | ポリシー定義にポリシー フラグメントを挿入します。 複数のフラグメントがある場合は、追加の include-fragment 要素を追加します。 |
いいえ |
使用法
- ポリシー スコープ: GraphQL リゾルバー
- ゲートウェイ: クラシック、v2、従量課金
使用上の注意
- このポリシーを使用してリゾルバーを構成および管理するには、「GraphQL リゾルバーを構成する」を参照してください。
- このポリシーは、スキーマ内の一致する GraphQL 操作の種類の 1 つのフィールドを解決する場合にのみ呼び出されます。
例
GraphQL クエリのリゾルバー
次の例では、バックエンド データ ソースへの HTTP GET
呼び出しを行ってクエリを解決します。
スキーマの例
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
サンプル ポリシー
<http-data-source>
<http-request>
<set-method>GET</set-method>
<set-url>https://data.contoso.com/get/users</set-url>
</http-request>
</http-data-source>
リキッド テンプレートを使用してリストを返す GraqhQL クエリのリゾルバー
次の例では、set-body ポリシーで使用するためにサポートされている液体テンプレートを使用して、HTTP 応答の一覧をクエリに返します。 また、REST API からの応答の username
フィールド名が、GraphQL 応答の name
に変更されます。
スキーマの例
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
サンプル ポリシー
<http-data-source>
<http-request>
<set-method>GET</set-method>
<set-url>https://data.contoso.com/users</set-url>
</http-request>
<http-response>
<set-body template="liquid">
[
{% JSONArrayFor elem in body %}
{
"name": "{{elem.username}}"
}
{% endJSONArrayFor %}
]
</set-body>
</http-response>
</http-data-source>
GraphQL 変化のリゾルバー
次の例では、HTTP データ ソースに POST
要求を行ってデータを挿入する変更を解決します。 HTTP 要求の set-body
ポリシー内のポリシー式は、GraphQL クエリで本文として渡される name
引数を変更します。 送信される本文は、次の JSON のようになります。
{
"name": "the-provided-name"
}
スキーマの例
type Query {
users: [User]
}
type Mutation {
makeUser(name: String!): User
}
type User {
id: String!
name: String!
}
サンプル ポリシー
<http-data-source>
<http-request>
<set-method>POST</set-method>
<set-url>https://data.contoso.com/user/create </set-url>
<set-header name="Content-Type" exists-action="override">
<value>application/json</value>
</set-header>
<set-body>@{
var args = context.GraphQL.Arguments;
JObject jsonObject = new JObject();
jsonObject.Add("name", args["name"])
return jsonObject.ToString();
}</set-body>
</http-request>
</http-data-source>
GraphQL 共用体型のリゾルバー
次の例では、バックエンド データ ソースへの orderById
HTTP 呼び出しを行ってクエリGET
を解決し、顧客 ID と型を含む JSON オブジェクトを返します。 顧客の型は、RegisteredCustomer
型と GuestCustomer
型の和集合です。
スキーマの例
type Query {
orderById(orderId: Int): Order
}
type Order {
customerId: Int!
orderId: Int!
customer: Customer
}
enum AccountType {
Registered
Guest
}
union Customer = RegisteredCustomer | GuestCustomer
type RegisteredCustomer {
accountType: AccountType!
customerId: Int!
customerGuid: String!
firstName: String!
lastName: String!
isActive: Boolean!
}
type GuestCustomer {
accountType: AccountType!
firstName: String!
lastName: String!
}
サンプル ポリシー
この例では、外部ソースから顧客の結果をモックし、フェッチされた結果を set-body
ポリシーにハード コーディングします。 __typename
フィールドは、顧客の型を決定するために使用されます。
<http-data-source>
<http-request>
<set-method>GET</set-method>
<set-url>https://data.contoso.com/orders/</set-url>
</http-request>
<http-response>
<set-body>{"customerId": 12345, "accountType": "Registered", "__typename": "RegisteredCustomer" }
</set-body>
</http-response>
</http-data-source>
関連ポリシー
関連するコンテンツ
ポリシーに対する処理の詳細については、次のトピックを参照してください。