Источник данных HTTP для сопоставителя
ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни Управление API
Политика http-data-source
сопоставителя настраивает HTTP-запрос и при необходимости HTTP-ответ для разрешения данных для типа объекта и поля в схеме GraphQL. Схема должна быть импортирована в Управление API как API GraphQL.
Примечание.
Задайте элементы политики и дочерние элементы в порядке, указанном в правиле политики. Узнайте, как устанавливать или изменять политики службы управления API.
Правило политики
<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 | Указывает URL-адрес и дочерние политики для настройки HTTP-запроса сопоставителя. | Да |
серверная часть | При необходимости перенаправляет HTTP-запрос сопоставителя в серверную службу, если указано. | No |
http-response | При необходимости указывает дочерние политики для настройки HTTP-ответа сопоставителя. Если значение не указано, ответ возвращается в виде необработанной строки. | No |
Элементы http-request
Примечание.
За исключением случаев, когда указано, каждый дочерний элемент может быть указан по крайней мере один раз. Укажите элементы в указанном порядке.
Элемент | Description | Обязательное поле |
---|---|---|
get-authorization-context | Возвращает контекст авторизации для HTTP-запроса сопоставителя. | No |
set-backend-service | Перенаправляет HTTP-запрос сопоставителя на указанную серверную часть. | No |
include-fragment | Вставляет фрагмент политики в определение политики. Если существует несколько фрагментов, добавьте дополнительные include-fragment элементы. |
No |
set-method | Задает метод HTTP-запроса сопоставителя. | Да |
set-url | Задает URL-адрес HTTP-запроса сопоставителя. | Да |
set-header | Задает заголовок в HTTP-запросе сопоставителя. Если есть несколько заголовков, добавьте дополнительные header элементы. |
No |
set-body | Задает текст в HTTP-запросе сопоставителя. | No |
authentication-certificate | Выполняет проверку подлинности с помощью сертификата клиента в HTTP-запросе сопоставителя. | No |
внутренний элемент
Элемент | Description | Обязательное поле |
---|---|---|
forward-request | Перенаправляет HTTP-запрос сопоставителя в настроенную серверную службу. | No |
Элементы http-response
Примечание.
За исключением случаев, когда указано, каждый дочерний элемент может быть указан по крайней мере один раз. Укажите элементы в указанном порядке.
Имя | Описание | Обязательное поле |
---|---|---|
set-body | Задает текст в http-ответе сопоставителя. | No |
xml-to-json | Преобразует HTTP-ответ сопоставителя из XML в JSON. | No |
find-and-replace | Находит подстроку в http-ответе сопоставителя и заменяет ее другой подстрокой. | No |
publish-event | Публикует событие в одну или несколько подписок, указанных в схеме API GraphQL. | No |
include-fragment | Вставляет фрагмент политики в определение политики. Если существует несколько фрагментов, добавьте дополнительные include-fragment элементы. |
No |
Использование
- Области политики: сопоставитель GraphQL
- Шлюзы: классическая, версия 2, потребление
Примечания об использовании
- Сведения о настройке сопоставителя и управлении ими с помощью этой политики см. в разделе "Настройка сопоставителя GraphQL".
- Эта политика вызывается только при разрешении одного поля в сопоставленном типе операции GraphQL в схеме.
Примеры
Сопоставитель для запроса 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, который возвращает список с помощью шаблона liquid
В следующем примере используется шаблон liquid, поддерживаемый для использования в политике set-body, для возврата списка в http-ответе на запрос. Он также переименовывает поле username
в ответе от REST API в name
в ответе GraphQL.
Пример схемы
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
В следующем примере устранена мутация, которая вставляет данные, выполняя POST
запрос к источнику данных HTTP. Выражение политики в политике set-body
HTTP-запроса изменяет name
аргумент, передаваемый в запросе GraphQL в качестве его сообщения. Отправляемый текст будет выглядеть как следующий 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
к внутреннему источнику данных и возвращает объект 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>
Связанные политики
Связанный контент
Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.
- Руководство. Преобразование и защита API
- Полный перечень операторов политик и их параметров см. в справочнике по политикам.
- Выражения политики
- Настройка или изменение политик
- Повторное использование конфигураций политик
- Репозиторий фрагментов политик
- Создание политик с помощью Microsoft Copilot в Azure