Sdílet prostřednictvím


Zdroj dat HTTP pro překladač

PLATÍ PRO: Všechny úrovně služby API Management

Zásada http-data-source překladače nakonfiguruje požadavek HTTP a volitelně odpověď HTTP pro překlad dat pro typ objektu a pole ve schématu GraphQL. Schéma se musí importovat do služby API Management jako rozhraní GraphQL API.

Poznámka:

Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady služby API Management.

Prohlášení o zásadách

<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

Název Popis Povinní účastníci
http-request Určuje zásady adresy URL a podřízené pro konfiguraci požadavku HTTP překladače. Ano
back-end Volitelně předá požadavek HTTP překladače do back-endové služby, pokud je zadán. No
http-response Volitelně můžete určit podřízené zásady pro konfiguraci odpovědi HTTP překladače. Pokud není zadán, vrátí se odpověď jako nezpracovaný řetězec. No

elementy http-request

Poznámka:

S výjimkou případů, kdy je uvedeno, může být každý podřízený prvek určen najednou. Zadejte prvky v uvedeném pořadí.

Element (Prvek) Popis Povinní účastníci
get-authorization-context Získá autorizační kontext pro požadavek HTTP překladače. No
set-back-end-service Přesměruje požadavek HTTP překladače na zadaný back-end. No
include-fragment Vloží fragment zásady do definice zásady. Pokud existuje více fragmentů, přidejte další include-fragment prvky. No
set-method Nastaví metodu požadavku HTTP překladače. Ano
set-url Nastaví adresu URL požadavku HTTP překladače. Ano
set-header Nastaví hlavičku v požadavku HTTP překladače. Pokud existuje více záhlaví, přidejte další header prvky. No
set-body Nastaví tělo v požadavku HTTP překladače. No
authentication-certificate Ověřuje se pomocí klientského certifikátu v požadavku HTTP překladače. No

back-endový element

Element (Prvek) Popis Povinní účastníci
forward-request Předá požadavek překladače HTTP nakonfigurované back-endové službě. No

elementy http-response

Poznámka:

S výjimkou případů, kdy je uvedeno, může být každý podřízený prvek určen najednou. Zadejte prvky v uvedeném pořadí.

Název Popis Povinní účastníci
set-body Nastaví tělo v odpovědi HTTP překladače. No
xml-to-json Transformuje odpověď HTTP překladače z XML na JSON. No
find-and-replace Najde podřetězeč v odpovědi HTTP překladače a nahradí ho jiným podřetězecem. No
publish-event Publikuje událost do jednoho nebo více odběrů zadaných ve schématu rozhraní GraphQL API. No
include-fragment Vloží fragment zásady do definice zásady. Pokud existuje více fragmentů, přidejte další include-fragment prvky. No

Využití

Poznámky k využití

  • Informace o konfiguraci a správě překladače pomocí této zásady najdete v tématu Konfigurace překladače GraphQL.
  • Tato zásada se vyvolá pouze při překladu jednoho pole v odpovídajícím typu operace GraphQL ve schématu.

Příklady

Překladač pro dotaz GraphQL

Následující příklad přeloží dotaz provedením volání HTTP GET do back-endového zdroje dat.

Příklad schématu

type Query {
    users: [User]
}

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

Ukázková zásada

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

Překladač pro dotaz GraphQL, který vrací seznam pomocí šablony Liquid

Následující příklad používá šablonu liquid, podporovanou pro použití v zásadách set-body , k vrácení seznamu v odpovědi HTTP na dotaz. Také přejmenuje username pole v odpovědi z rozhraní REST API na name v odpovědi GraphQL.

Příklad schématu

type Query {
    users: [User]
}

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

Ukázková zásada

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

Resolver for GraphQL mutovat

Následující příklad vyřeší mutování, které vloží data tak, že odešle POST požadavek na zdroj dat HTTP. Výraz zásady v set-body zásadě požadavku HTTP upraví name argument předaný v dotazu GraphQL jako jeho tělo. Text, který se odešle, bude vypadat jako následující JSON:

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

Příklad schématu

type Query {
    users: [User]
}

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

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

Ukázková zásada

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

Překladač pro sjednocovacího typu GraphQL

Následující příklad tento dotaz vyřeší orderById tak, že provede volání HTTP GET do back-endového zdroje dat a vrátí objekt JSON, který obsahuje ID a typ zákazníka. Typ zákazníka je sjednocení a RegisteredCustomer GuestCustomer typy.

Příklad schématu

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

Ukázková zásada

V tomto příkladu napodobíme výsledky zákazníka z externího zdroje a pevně zakódujeme načtené výsledky v zásadách set-body . Pole __typename slouží k určení typu zákazníka.

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

Další informace o práci se zásadami najdete v tématech: