Udostępnij za pośrednictwem


Ź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
http-request 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.
http-response 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.

Element 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.
set-method 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

Element 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.
find-and-replace 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: