HTTP-datakälla för en matchare

GÄLLER FÖR: Alla API Management-nivåer

Matchningsprincipen http-data-source konfigurerar HTTP-begäran och om du vill kan HTTP-svaret matcha data för en objekttyp och ett fält i ett GraphQL-schema. Schemat måste importeras till API Management som ett GraphQL-API.

Kommentar

Ange principens element och underordnade element i den ordning som anges i principbeskrivningen. Läs mer om hur du anger eller redigerar API Management-principer.

Principuttryck

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

Element

Name beskrivning Obligatoriskt
http-request Anger en URL och underordnade principer för att konfigurera matcharens HTTP-begäran. Ja
backend Du kan också vidarebefordra matcharens HTTP-begäran till en serverdelstjänst, om det anges. Nej
http-response Du kan också ange underordnade principer för att konfigurera matcharens HTTP-svar. Om inget anges returneras svaret som en råsträng. Nej

http-request-element

Kommentar

Förutom där det anges kan varje underordnat element anges högst en gång. Ange element i den ordning som anges.

Element Description Obligatoriskt
get-authorization-context Hämtar en auktoriseringskontext för matcharens HTTP-begäran. Nej
set-backend-service Omdirigerar matcharens HTTP-begäran till den angivna serverdelen. Nej
include-fragment Infogar ett principfragment i principdefinitionen. Om det finns flera fragment lägger du till ytterligare include-fragment element. Nej
set-method Anger metoden för matcharens HTTP-begäran. Ja
set-url Anger URL:en för matcharens HTTP-begäran. Ja
set-header Anger ett huvud i matcharens HTTP-begäran. Om det finns flera rubriker lägger du till ytterligare header element. Nej
set-body Anger brödtexten i matcharens HTTP-begäran. Nej
authentication-certificate Autentiserar med ett klientcertifikat i matcharens HTTP-begäran. Nej

serverdelselement

Element Description Obligatoriskt
forward-request Vidarebefordrar matcharens HTTP-begäran till en konfigurerad serverdelstjänst. Nej

http-response-element

Kommentar

Förutom där det anges kan varje underordnat element anges högst en gång. Ange element i den ordning som anges.

Name beskrivning Obligatoriskt
set-body Anger brödtexten i matcharens HTTP-svar. Nej
xml-to-json Transformerar matcharens HTTP-svar från XML till JSON. Nej
find-and-replace Hittar en delsträng i matcharens HTTP-svar och ersätter den med en annan delsträng. Nej
publish-event Publicerar en händelse till en eller flera prenumerationer som anges i GraphQL API-schemat. Nej
include-fragment Infogar ett principfragment i principdefinitionen. Om det finns flera fragment lägger du till ytterligare include-fragment element. Nej

Användning

Användningsanteckningar

  • Information om hur du konfigurerar och hanterar en lösning med den här principen finns i Konfigurera en GraphQL-matchare.
  • Den här principen anropas endast när du löser ett enda fält i en matchande GraphQL-åtgärdstyp i schemat.
  • Den här principen stöder GraphQL-uniontyper.

Exempel

Lösare för GraphQL-fråga

Följande exempel löser en fråga genom att göra ett HTTP-anrop GET till en serverdelsdatakälla.

Exempelschema

type Query {
    users: [User]
}

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

Exempelprincip

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

Lösare för en GraqhQL-fråga som returnerar en lista med hjälp av en flytande mall

I följande exempel används en flytande mall som stöds för användning i set-body-principen för att returnera en lista i HTTP-svaret på en fråga. Det byter också namn på fältet username i svaret från REST-API:et till name i GraphQL-svaret.

Exempelschema

type Query {
    users: [User]
}

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

Exempelprincip

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

Lösning för GraphQL-mutation

I följande exempel löses en mutation som infogar data genom att göra en POST begäran till en HTTP-datakälla. Principuttrycket i principen för set-body HTTP-begäran ändrar ett name argument som skickas i GraphQL-frågan som dess brödtext. Brödtexten som skickas ser ut som följande JSON:

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

Exempelschema

type Query {
    users: [User]
}

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

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

Exempelprincip

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

Lösare för GraphQL-uniontyp

Följande exempel löser orderById frågan genom att göra ett HTTP-anrop GET till en serverdelsdatakälla och returnerar ett JSON-objekt som innehåller kund-ID och typ. Kundtypen är en union av RegisteredCustomer och GuestCustomer typer.

Exempelschema

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

Exempelprincip

I det här exemplet hånar vi kundens resultat från en extern källa och hårdkodar de hämtade resultaten i set-body principen. Fältet __typename används för att fastställa kundens typ.

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

Mer information om hur du arbetar med principer finns i: