Udostępnij za pomocą


Źródło danych HTTP dla narzędzia rozpoznawania nazw

DOTYCZY: Wszystkie warstwy usługi API Management

Zasady rozpoznawania http-data-source nazw konfiguruje żądanie HTTP i opcjonalnie odpowiedź HTTP w celu rozpoznania danych dla typu obiektu i pola w schemacie GraphQL. Schemat należy zaimportować do usługi API Management jako interfejs API GraphQL.

Uwaga

Ustaw elementy zasad i elementy podrzędne w kolejności podanej w instrukcji zasad. Dowiedz się więcej na temat ustawiania lub edytowania zasad usługi API Management.

Instrukcja zasad

<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> 

Elementy

Nazwa/nazwisko opis Wymagania
żądanie HTTP Określa adres URL i zasady podrzędne, aby skonfigurować żądanie HTTP programu rozpoznawania nazw. Tak
zaplecze Opcjonalnie przekazuje żądanie HTTP programu resolver do usługi zaplecza, jeśli określono. Nie.
odpowiedź HTTP Opcjonalnie określa zasady podrzędne, aby skonfigurować odpowiedź HTTP modułu rozpoznawania nazw. Jeśli nie zostanie określona, odpowiedź zostanie zwrócona jako nieprzetworzony ciąg. Nie.

Elementy żądania http

Uwaga

Z wyjątkiem przypadków, w których zaznaczono, każdy element podrzędny może być określony co najwyżej raz. Określ elementy w podanej kolejności.

Składnik opis Wymagania
get-authorization-context Pobiera kontekst autoryzacji dla żądania HTTP programu resolver. Nie.
set-backend-service Przekierowuje żądanie HTTP programu resolver do określonego zaplecza. Nie.
include-fragment Wstawia fragment zasad w definicji zasad. Jeśli istnieje wiele fragmentów, dodaj dodatkowe include-fragment elementy. Nie.
metoda ustawiania Ustawia metodę żądania HTTP modułu rozpoznawania nazw. Tak
set-url Ustawia adres URL żądania HTTP modułu rozpoznawania nazw. Tak
set-header Ustawia nagłówek w żądaniu HTTP modułu rozpoznawania nazw. Jeśli istnieje wiele nagłówków, dodaj dodatkowe header elementy. Nie.
set-body Ustawia treść w żądaniu HTTP programu resolver. Nie.
uwierzytelnianie certyfikatu Uwierzytelnia się przy użyciu certyfikatu klienta w żądaniu HTTP narzędzia rozpoznawania nazw. Nie.

backend, element

Składnik opis Wymagania
prześlij dalej żądanie Przekazuje żądanie HTTP modułu rozpoznawania nazw do skonfigurowanej usługi zaplecza. Nie.

elementy http-response

Uwaga

Z wyjątkiem przypadków, w których zaznaczono, każdy element podrzędny może być określony co najwyżej raz. Określ elementy w podanej kolejności.

Nazwa/nazwisko opis Wymagania
set-body Ustawia treść w odpowiedzi HTTP modułu rozpoznawania nazw. Nie.
xml-to-json Przekształca odpowiedź HTTP programu resolver z xml na JSON. Nie.
znajdź i zamień Znajduje podciąg w odpowiedzi HTTP modułu rozpoznawania nazw i zastępuje go innym podciągem. Nie.
zdarzenie publikowania Publikuje zdarzenie w co najmniej jednej subskrypcji określonej w schemacie interfejsu API GraphQL. Nie.
include-fragment Wstawia fragment zasad w definicji zasad. Jeśli istnieje wiele fragmentów, dodaj dodatkowe include-fragment elementy. Nie.

Użycie

Uwagi dotyczące użycia

  • Aby skonfigurować program rozpoznawania nazw i zarządzać nim za pomocą tych zasad, zobacz Konfigurowanie narzędzia rozpoznawania języka GraphQL.
  • Te zasady są wywoływane tylko w przypadku rozpoznawania pojedynczego pola w pasującym typie operacji GraphQL w schemacie.

Przykłady

Narzędzie rozpoznawania dla zapytania GraphQL

Poniższy przykład rozwiązuje zapytanie, wykonując wywołanie HTTP GET do źródła danych zaplecza.

Przykładowy schemat

type Query {
    users: [User]
}

type User {
    id: String!
    name: String!
}

Przykładowe zasady

<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>

Narzędzie rozpoznawania dla zapytania GraphQL zwracającego listę przy użyciu szablonu liquid

W poniższym przykładzie użyto szablonu liquid obsługiwanego do użycia w zasadach set-body , aby zwrócić listę w odpowiedzi HTTP na zapytanie. Zmienia również nazwę username pola w odpowiedzi z interfejsu API REST na name w odpowiedzi GraphQL.

Przykładowy schemat

type Query {
    users: [User]
}

type User {
    id: String!
    name: String!
}

Przykładowe zasady

<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>

Rozpoznawanie mutacji GraphQL

Poniższy przykład rozwiązuje mutację, która wstawia dane, wysyłając POST żądanie do źródła danych HTTP. Wyrażenie zasad w set-body zasadach żądania HTTP modyfikuje name argument przekazywany w zapytaniu GraphQL jako jego treść. Treść, która jest wysyłana, będzie wyglądać podobnie do następującego kodu JSON:

{
    "name": "the-provided-name"
}

Przykładowy schemat

type Query {
    users: [User]
}

type Mutation {
    makeUser(name: String!): User
}

type User {
    id: String!
    name: String!
}

Przykładowe zasady

<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>

Rozpoznawanie typu unii GraphQL

Poniższy przykład rozwiązuje orderById zapytanie, wykonując wywołanie HTTP GET do źródła danych zaplecza i zwraca obiekt JSON zawierający identyfikator klienta i typ. Typ klienta to związek RegisteredCustomer typów i GuestCustomer .

Przykładowy schemat

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!
}

Przykładowe zasady

W tym przykładzie wyśmiewamy wyniki klienta z zewnętrznego źródła i kod twardy pobranych wyników w set-body zasadach. Pole __typename służy do określania typu klienta.

<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>

Aby uzyskać więcej informacji na temat pracy z zasadami, zobacz: