Бөлісу құралы:


Источник данных 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".
  • Эта политика вызывается только при разрешении одного поля в сопоставленном типе операции 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>

Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.