Freigeben über


HTTP-Datenquelle für einen Auflöser

GILT FÜR: Alle API Management-Ebenen

Die http-data-source-Auflöserrichtlinie konfiguriert die HTTP-Anforderung und optional die HTTP-Antwort, um Daten für einen Objekttyp und ein Feld in einem GraphQL-Schema aufzulösen. Das Schema muss als GraphQL-API in API Management importiert werden.

Hinweis

Legen Sie die Elemente und untergeordneten Elemente einer Richtlinie in der Reihenfolge fest, die in der Richtlinienanweisung angegeben ist. Erfahren Sie mehr darüber, wie Sie API Management-Richtlinien festlegen oder bearbeiten.

Richtlinienanweisung

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

Elemente

Name BESCHREIBUNG Erforderlich
http-request Gibt eine URL und untergeordnete Richtlinien an, um die HTTP-Anforderung des Resolvers zu konfigurieren. Ja
Back-End Leitet optional die HTTP-Anforderung des Resolvers an einen Back-End-Dienst weiter, sofern angegeben. Nein
http-response Gibt optional untergeordnete Richtlinien an, um die HTTP-Antwort des Resolvers zu konfigurieren. Wenn die Antwort nicht angegeben ist, wird sie als Rohzeichenfolge zurückgegeben. Nein

http-request-Elemente

Hinweis

Sofern nicht anders angegeben, darf jedes untergeordnete Element höchstens einmal festgelegt werden. Geben Sie Elemente in der aufgeführten Reihenfolge an.

Element BESCHREIBUNG Erforderlich
get-authorization-context Ruft einen Autorisierungskontext für die HTTP-Anforderung des Resolvers ab. Nein
set-backend-service Leitet die HTTP-Anforderung des Resolvers an das angegebene Back-End um. Nein
include-fragment Fügt ein Richtlinienfragment in die Richtliniendefinition ein. Wenn mehrere Fragmente vorhanden sind, fügen Sie zusätzliche include-fragment-Elemente hinzu. Nein
set-method Legt die Methode der HTTP-Anforderung des Auflösers fest. Ja
set-url Die URL der HTTP-Anforderung des Auflösers. Ja
set-header Legt einen Header in der HTTP-Anforderung des Auflösers fest. Wenn mehrere Header vorhanden sind, fügen Sie zusätzliche header-Elemente hinzu. Nein
set-body Legt den Text in der HTTP-Anforderung des Auflösers fest. Nein
authentication-certificate Authentifiziert sich mithilfe eines Clientzertifikats in der HTTP-Anforderung des Auflösers. Nein

Back-End-Element

Element BESCHREIBUNG Erforderlich
forward-request Leitet die HTTP-Anforderung des Resolvers an einen konfigurierten Back-End-Dienst weiter. Nein

http-response-Elemente

Hinweis

Sofern nicht anders angegeben, darf jedes untergeordnete Element höchstens einmal festgelegt werden. Geben Sie Elemente in der aufgeführten Reihenfolge an.

Name BESCHREIBUNG Erforderlich
set-body Legt den Text in der HTTP-Antwort des Auflösers fest. Nein
xml-to-json Transformiert die HTTP-Antwort des Auflösers von XML in JSON. Nein
find-and-replace Sucht eine Teilzeichenfolge in der HTTP-Antwort des Auflösers und ersetzt sie durch eine andere Teilzeichenfolge. Nein
publish-event Veröffentlicht ein Ereignis für ein oder mehrere Abonnements, die im GraphQL-API-Schema angegeben sind. Nein
include-fragment Fügt ein Richtlinienfragment in die Richtliniendefinition ein. Wenn mehrere Fragmente vorhanden sind, fügen Sie zusätzliche include-fragment-Elemente hinzu. Nein

Verwendung

Hinweise zur Verwendung

  • Informationen zum Konfigurieren und Verwalten eines Resolvers mit dieser Richtlinie finden Sie unter Konfigurieren eines GraphQL-Resolvers.
  • Diese Richtlinie wird nur aufgerufen, wenn ein einzelnes Feld in einem übereinstimmenden GraphQL-Vorgangstyp im Schema aufgelöst wird.

Beispiele

Resolver für die GraphQL-Abfrage

Im folgenden Beispiel wird eine Abfrage aufgelöst, indem ein HTTP-GET-Aufruf an eine Back-End-Datenquelle ausgeführt wird.

Beispielschema

type Query {
    users: [User]
}

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

Beispielrichtlinie

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

Resolver für eine GraphQL-Abfrage, die unter Verwendung einer Liquid-Vorlage eine Liste zurückgibt

Im folgenden Beispiel wird eine Liquid-Vorlage verwendet, die zum Verwenden in der set-body-Richtlinie unterstützt wird, um in der HTTP-Antwort auf eine Abfrage eine Liste zurückzugeben. Außerdem wird das username Feld in der Antwort der REST-API in die GraphQL-Antwort name umbenannt.

Beispielschema

type Query {
    users: [User]
}

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

Beispielrichtlinie

<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 für eine GraphQL-Mutation

Im folgenden Beispiel wird eine Mutation aufgelöst, die Daten einfügt, indem sie eine POST-Anforderung an eine HTTP-Datenquelle stellt. Der Richtlinienausdruck in der set-body-Richtlinie der HTTP-Anforderung ändert ein name-Argument, das in der GraphQL-Abfrage als deren Textkörper übergeben wird. Der gesendete Text sieht wie die folgende JSON aus:

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

Beispielschema

type Query {
    users: [User]
}

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

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

Beispielrichtlinie

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

Resolver für einen GraphQL-Union-Typ

Im folgenden Beispiel wird die orderById-Abfrage aufgelöst, indem ein HTTP-GET-Aufruf an eine Back-End-Datenquelle gesendet und ein JSON-Objekt zurückgegeben wird, das die Kunden-ID und den Typ enthält. Der Kundentyp ist eine Union aus den Typen RegisteredCustomer und GuestCustomer.

Beispielschema

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

Beispielrichtlinie

In diesem Beispiel simulieren wir die Kundenergebnisse aus einer externen Quelle und hartcodieren die abgerufenen Ergebnisse in der Richtlinie set-body. Das Feld __typename wird verwendet, um den Typ des Kunden zu bestimmen.

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

Weitere Informationen zum Arbeiten mit Richtlinien finden Sie hier: