Share via


HTTP-gegevensbron voor een resolver

VAN TOEPASSING OP: Alle API Management-lagen

Het http-data-source resolver-beleid configureert de HTTP-aanvraag en optioneel het HTTP-antwoord om gegevens voor een objecttype en veld in een GraphQL-schema op te lossen. Het schema moet als GraphQL-API worden geïmporteerd in API Management.

Notitie

Stel de elementen en onderliggende elementen van het beleid in de volgorde in die in de beleidsverklaring is opgegeven. Meer informatie over het instellen of bewerken van API Management-beleid.

Beleidsinstructie

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

Elementen

Name Beschrijving Vereist
http-request Hiermee geeft u een URL en onderliggend beleid voor het configureren van de HTTP-aanvraag van de resolver. Ja
back-end U kunt eventueel de HTTP-aanvraag van de resolver doorsturen naar een back-endservice, indien opgegeven. Nee
http-response Optioneel geeft u onderliggend beleid op om het HTTP-antwoord van de resolver te configureren. Als dit niet is opgegeven, wordt het antwoord geretourneerd als een onbewerkte tekenreeks. Nee

http-request-elementen

Notitie

Behalve waar vermeld, kan elk onderliggend element maximaal één keer worden opgegeven. Geef elementen op in de vermelde volgorde.

Element Beschrijving Vereist
get-authorization-context Hiermee haalt u een autorisatiecontext op voor de HTTP-aanvraag van de resolver. Nee
set-backend-service Hiermee wordt de HTTP-aanvraag van de resolver omgeleid naar de opgegeven back-end. Nee
include-fragment Hiermee voegt u een beleidsfragment in de beleidsdefinitie in. Als er meerdere fragmenten zijn, voegt u extra include-fragment elementen toe. Nee
set-method Hiermee stelt u de methode van de HTTP-aanvraag van de resolver in. Ja
set-URL Hiermee stelt u de URL van de HTTP-aanvraag van de resolver in. Ja
set-header Hiermee stelt u een header in de HTTP-aanvraag van de resolver in. Als er meerdere headers zijn, voegt u extra header elementen toe. Nee
set-body Hiermee stelt u de hoofdtekst in de HTTP-aanvraag van de resolver in. Nee
verificatiecertificaat Verifieert met behulp van een clientcertificaat in de HTTP-aanvraag van de resolver. Nee

back-endelement

Element Beschrijving Vereist
forward-request Stuurt de HTTP-aanvraag van de resolver door naar een geconfigureerde back-endservice. Nee

http-response-elementen

Notitie

Behalve waar vermeld, kan elk onderliggend element maximaal één keer worden opgegeven. Geef elementen op in de vermelde volgorde.

Name Beschrijving Vereist
set-body Hiermee stelt u de hoofdtekst in het HTTP-antwoord van de resolver in. Nee
xml-to-json Transformeert het HTTP-antwoord van de resolver van XML naar JSON. Nee
zoeken en vervangen Zoekt een subtekenreeks in het HTTP-antwoord van de resolver en vervangt deze door een andere subtekenreeks. Nee
publish-event Hiermee publiceert u een gebeurtenis naar een of meer abonnementen die zijn opgegeven in het GraphQL API-schema. Nee
include-fragment Hiermee voegt u een beleidsfragment in de beleidsdefinitie in. Als er meerdere fragmenten zijn, voegt u extra include-fragment elementen toe. Nee

Gebruik

Gebruiksnotities

  • Als u een resolver met dit beleid wilt configureren en beheren, raadpleegt u Een GraphQL-resolver configureren.
  • Dit beleid wordt alleen aangeroepen bij het omzetten van één veld in een overeenkomend GraphQL-bewerkingstype in het schema.

Voorbeelden

Resolver voor GraphQL-query

In het volgende voorbeeld wordt een query omgezet door een HTTP-aanroep uit te voeren naar een back-endgegevensbron GET .

Voorbeeldschema

type Query {
    users: [User]
}

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

Voorbeeldbeleid

<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 voor een GraqhQL-query die een lijst retourneert met behulp van een liquide sjabloon

In het volgende voorbeeld wordt een liquide sjabloon gebruikt die wordt ondersteund voor gebruik in het setbody-beleid om een lijst in het HTTP-antwoord op een query te retourneren. Ook wordt de naam van het username veld in het antwoord van de REST API name gewijzigd in het GraphQL-antwoord.

Voorbeeldschema

type Query {
    users: [User]
}

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

Voorbeeldbeleid

<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 voor GraphQL mutatie

In het volgende voorbeeld wordt een mutatie opgelost die gegevens invoegt door een POST aanvraag in te dienen bij een HTTP-gegevensbron. De beleidsexpressie in het set-body beleid van de HTTP-aanvraag wijzigt een name argument dat wordt doorgegeven in de GraphQL-query als hoofdtekst. De hoofdtekst die wordt verzonden, ziet eruit als de volgende JSON:

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

Voorbeeldschema

type Query {
    users: [User]
}

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

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

Voorbeeldbeleid

<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 voor Type GraphQL-samenvoeging

In het volgende voorbeeld wordt de orderById query omgezet door een HTTP-aanroep uit te voeren naar een back-endgegevensbron en wordt een JSON-object geretourneerd dat de klant-id GET en het type bevat. Het type klant is een samenvoeging van RegisteredCustomer en GuestCustomer typen.

Voorbeeldschema

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

Voorbeeldbeleid

In dit voorbeeld worden de resultaten van de klant gesimuleerd op basis van een externe bron en worden de opgehaalde resultaten in het set-body beleid vastgelegd. Het __typename veld wordt gebruikt om het type klant te bepalen.

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

Zie voor meer informatie over het werken met beleid: