Установка сопоставителя GraphQL (прекращено)
Важно!
- Политика
set-graphql-resolver
прекращается. Клиенты,set-graphql-resolver
использующие политику, должны перейти на управляемые сопоставители для GraphQL API, которые предоставляют расширенные функциональные возможности. - После настройки управляемого сопоставителя для поля GraphQL шлюз пропускает
set-graphql-resolver
политику в любых определениях политик. Нельзя сочетать использование управляемых сопоставителей и политики в экземпляреset-graphql-resolver
Управление API.
Политикаset-graphql-resolver
извлекает или задает данные для поля GraphQL в типе объекта, указанном в схеме GraphQL. Схема должна быть импортирована в Управление API. В настоящее время данные должны быть разрешены с помощью источника данных на основе HTTP (REST или API SOAP).
Примечание
Задайте элементы политики и дочерние элементы в порядке, указанном в правиле политики. Узнайте, как устанавливать или изменять политики Управления API.
Правило политики
<set-graphql-resolver parent-type="type" field="field">
<http-data-source>
<http-request>
<set-method>...set-method policy configuration...</set-method>
<set-url>URL</set-url>
<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>
<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>
</http-response>
</http-data-source>
</set-graphql-resolver>
Атрибуты
Атрибут | Описание | Обязательно | Значение по умолчанию |
---|---|---|---|
родительский тип | Тип объекта в схеме GraphQL. | Да | Н/Д |
поле | Поле указанного parent-type в схеме GraphQL. |
Да | Н/Д |
Примечание
В настоящее время значения parent-type
и field
не проверяются этой политикой. Если они недопустимы, политика игнорируется, а запрос GraphQL перенаправляются в конечную точку GraphQL (если она настроена).
Элементы
Название | Описание | Обязательно |
---|---|---|
http-data-source | Настраивает HTTP-запрос и при необходимости HTTP-ответ, используемый для разрешения данных для заданного parent-type и field . |
Да |
http-request | Указывает URL-адрес и дочерние политики для настройки HTTP-запроса сопоставителя. | Да |
http-response | При необходимости указывает дочерние политики для настройки HTTP-ответа сопоставителя. Если значение не указано, ответ возвращается в виде необработанной строки. |
Элементы http-request
Примечание
За исключением случаев, когда указано, каждый дочерний элемент может быть указан не более одного раза. Укажите элементы в указанном порядке.
Элемент | Описание | Обязательно |
---|---|---|
set-method | Задает метод HTTP-запроса сопоставителя. | Да |
set-url | Задает URL-адрес HTTP-запроса сопоставителя. | Да |
set-header | Задает заголовок в HTTP-запросе сопоставителя. Если заголовков несколько, добавьте дополнительные header элементы. |
Нет |
set-body | Задает текст в HTTP-запросе сопоставителя. | Нет |
authentication-certificate | Выполняет проверку подлинности с помощью сертификата клиента в HTTP-запросе сопоставителя. | Нет |
Элементы http-response
Примечание
Каждый дочерний элемент может быть указан не более одного раза. Укажите элементы в указанном порядке.
Имя | Описание | Обязательно |
---|---|---|
set-body | Задает текст в HTTP-ответе сопоставителя. | Нет |
xml-to-json | Преобразует HTTP-ответ сопоставителя из XML в JSON. | Нет |
find-and-replace | Находит подстроку в HTTP-ответе сопоставителя и заменяет ее другой подстрокой. | Нет |
Использование
- Разделы политики: серверная часть
- Области политики: глобальная, рабочая область, продукт, API, операция
- Шлюзы: выделенные
Примечания об использовании
- Эта политика вызывается только при выполнении соответствующего запроса GraphQL.
- Политика разрешает данные для одного поля. Чтобы разрешать данные для нескольких полей, настройте несколько экземпляров этой политики в определении политики.
контекст GraphQL
- Контекст HTTP-запроса и HTTP-ответа (если он указан) отличается от контекста исходного запроса API шлюза:
- В качестве значения
context.ParentResult
задается родительский объект для текущего выполнения сопоставителя. - Контекст HTTP-запроса содержит аргументы, передаваемые в запросе GraphQL в качестве основного текста.
- Контекст ответа HTTP — это ответ от независимого HTTP-вызова, выполненного сопоставителем, а не контекст для полного ответа на запрос шлюза.
При использовании с политиками
<set-graphql-resolver>
переменнаяcontext
, передаваемая через конвейер запросов и ответов, дополняется контекстом GraphQL.
- В качестве значения
ParentResult
В качестве значения context.ParentResult
задается родительский объект для текущего выполнения сопоставителя. Рассмотрим следующую частичную схему:
type Comment {
id: ID!
owner: string!
content: string!
}
type Blog {
id: ID!
title: string!
content: string!
comments: [Comment]!
comment(id: ID!): Comment
}
type Query {
getBlog(): [Blog]!
getBlog(id: ID!): Blog
}
Также рассмотрим запрос GraphQL для всех сведений для определенного блога:
query {
getBlog(id: 1) {
title
content
comments {
id
owner
content
}
}
}
Если задан сопоставитель для parent-type="Blog" field="comments"
, вы захотите узнать, какой идентификатор блога следует использовать. Идентификатор блога можно получить с помощью context.ParentResult.AsJObject()["id"].ToString()
. Политика настройки этого сопоставителя будет выглядеть следующим образом:
<set-graphql-resolver parent-type="Blog" field="comments">
<http-data-source>
<http-request>
<set-method>GET</set-method>
<set-url>@{
var blogId = context.ParentResult.AsJObject()["id"].ToString();
return $"https://data.contoso.com/api/blog/{blogId}";
}</set-url>
</http-request>
</http-data-source>
</set-graphql-resolver>
Аргументы
Аргументы для параметризованного запроса GraphQL добавляются в текст запроса. Например, рассмотрим следующие два запроса:
query($id: Int) {
getComment(id: $id) {
content
}
}
query {
getComment(id: 2) {
content
}
}
С их помощью можно вызвать сопоставитель getComment
. GraphQL отправляет следующие полезные данные JSON:
{
"query": "query($id: Int) { getComment(id: $id) { content } }",
"variables": { "id": 2 }
}
{
"query": "query { getComment(id: 2) { content } }"
}
При выполнении сопоставителя свойство arguments
добавляется в текст. Сопоставитель можно определить следующим образом:
<set-graphql-resolver parent-type="Blog" field="comments">
<http-data-source>
<http-request>
<set-method>GET</set-method>
<set-url>@{
var commentId = context.Request.Body.As<JObject>(true)["arguments"]["id"];
return $"https://data.contoso.com/api/comment/{commentId}";
}</set-url>
</http-request>
</http-data-source>
</set-graphql-resolver>
Дополнительные примеры
Сопоставитель для запроса GraphQL
В следующем примере запрос разрешается путем вызова HTTP GET
к внутреннему источнику данных.
Пример схемы
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Пример политики
<set-graphql-resolver parent-type="Query" field="users">
<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>
</set-graphql-resolver>
Сопоставитель для запроса GraqhQL, который возвращает список с помощью шаблона liquid
В следующем примере используется шаблон liquid, поддерживаемый для использования в политике set-body, для возврата списка в http-ответе на запрос. Он также переименовывает поле username
в ответе от REST API в name
в ответе GraphQL.
Пример схемы
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Пример политики
<set-graphql-resolver parent-type="Query" field="users">
<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>
</set-graphql-resolver>
Сопоставитель для изменения 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!
}
Пример политики
<set-graphql-resolver parent-type="Mutation" field="makeUser">
<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.Request.Body.As<JObject>(true)["arguments"];
JObject jsonObject = new JObject();
jsonObject.Add("name", args["name"])
return jsonObject.ToString();
}</set-body>
</http-request>
</http-data-source>
</set-graphql-resolver>
Связанные политики
См. также
Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.
- Руководство по Преобразование и защита API
- Полный перечень операторов политик и их параметров см. в справочнике по политикам.
- Выражения политики
- Настройка или изменение политик
- Повторное использование конфигураций политик
- Репозиторий фрагментов политики
- Создание политик с помощью Microsoft Copilot для Azure