Een GraphQL-resolver configureren

VAN TOEPASSING OP: Alle API Management-lagen

Configureer een resolver om gegevens op te halen of in te stellen voor een GraphQL-veld in een objecttype dat is opgegeven in een GraphQL-schema. Het schema moet als GraphQL-API worden geïmporteerd in API Management.

Momenteel biedt API Management ondersteuning voor resolvers die toegang hebben tot de volgende gegevensbronnen:

Goed om te weten

  • Een resolver is een resource die een beleidsdefinitie bevat die alleen wordt aangeroepen wanneer een overeenkomend objecttype en -veld in het schema wordt uitgevoerd.
  • Met elke resolver worden gegevens voor één veld omgezet. Als u gegevens voor meerdere velden wilt oplossen, configureert u een afzonderlijke resolver voor elk veld.
  • Beleidsregels binnen het bereik van resolver worden geëvalueerd na een inbound beleid backend in de pijplijn voor beleidsuitvoering. Ze nemen geen beleidsregels over van andere bereiken. Zie Beleid in API Management voor meer informatie.
  • U kunt api-scoped beleid configureren voor een GraphQL-API, onafhankelijk van het beleid voor resolverbereik. Voeg bijvoorbeeld een beleid voor validate-graphql-request toe aan het inbound bereik om de aanvraag te valideren voordat de resolver wordt aangeroepen. Configureer beleidsregels met API-bereik op het tabblad API-beleid voor de API.

Vereisten

Een resolver maken

Met de volgende stappen maakt u een resolver met behulp van een op HTTP gebaseerde gegevensbron. De algemene stappen zijn vergelijkbaar voor elke resolver die gebruikmaakt van een ondersteunde gegevensbron.

  1. Blader in Azure Portal naar uw API Management-exemplaar.

  2. Selecteer API's in het linkermenu en vervolgens de naam van uw GraphQL-API.

  3. Controleer op het tabblad Schema het schema voor een veld in een objecttype waar u een resolver wilt configureren.

    1. Selecteer een veld en plaats de aanwijzer in de linkermarge.

    2. Selecteer + Resolver toevoegen.

      Schermopname van het toevoegen van een resolver vanuit een veld in GraphQL-schema in de portal.

  4. Op de pagina Resolver maken:

    1. Werk de eigenschap Naam desgewenst bij, voer desgewenst een beschrijving in en bevestig of werk de selecties Type en Veld bij.
    2. Selecteer de gegevensbron van de resolver. Selecteer voor dit voorbeeld HTTP-API.
  5. Werk in de beleidseditor van Resolver het http-data-source beleid bij met onderliggende elementen voor uw scenario.

    1. Werk het vereiste http-request element bij met beleidsregels om de GraphQL-bewerking te transformeren naar een HTTP-aanvraag.

    2. Voeg eventueel een http-response element toe en voeg onderliggend beleid toe om het HTTP-antwoord van de resolver te transformeren. Als het http-response element niet is opgegeven, wordt het antwoord geretourneerd als een onbewerkte tekenreeks.

    3. Selecteer Maken.

      Schermopname van de beleidseditor voor resolver in de portal.

    De resolver is gekoppeld aan het veld en wordt weergegeven op het tabblad Resolvers .

    Schermopname van de lijst met resolvers voor GraphQL API in de portal.

Resolvers beheren

De resolvers voor een GraphQL-API weergeven en beheren op het tabblad Resolvers van de API.

Schermopname van het beheren van resolvers voor GraphQL API in de portal.

Op het tabblad Resolvers :

  • De gekoppelde kolom geeft aan of de resolver is geconfigureerd voor een veld dat zich momenteel in het GraphQL-schema bevindt. Als een resolver niet is gekoppeld, kan deze niet worden aangeroepen.

  • Zoek in het contextmenu (...) voor een resolver opdrachten om een resolver te klonen, bewerken of verwijderen . Kloon een vermelde resolver om snel een vergelijkbare resolver te maken die gericht is op een ander type en een ander veld.

  • U kunt een nieuwe resolver maken door + Maken te selecteren.

Een resolver bewerken en testen

Wanneer u één resolver bewerkt, wordt de pagina Resolver bewerken geopend. U kunt:

  • Werk het beleid voor de resolver en eventueel de gegevensbron bij. Als u de gegevensbron wijzigt, wordt het huidige resolver-beleid overschreven.

  • Wijzig het type en het veld dat door de resolver wordt bedoeld.

  • Test en foutopsporing in de configuratie van de resolver. Wanneer u het beleid voor de resolver bewerkt, selecteert u Test uitvoeren om de uitvoer van de gegevensbron te controleren, die u kunt valideren op basis van het schema. Als er fouten optreden, bevat het antwoord informatie over probleemoplossing.

    Schermopname van het bewerken van een resolver in de portal.

GraphQL-context

  • De context voor de aanvraag en reactie van de resolver (indien opgegeven) verschilt van de context voor de oorspronkelijke gateway-API-aanvraag:
    • context.GraphQL eigenschappen worden ingesteld op de argumenten (Arguments) en het bovenliggende object (Parent) voor de huidige uitvoering van de resolver.
    • De aanvraagcontext bevat argumenten die worden doorgegeven in de GraphQL-query als hoofdtekst.
    • De reactiecontext is het antwoord van de onafhankelijke aanroep van de resolver, niet de context voor het volledige antwoord voor de gatewayaanvraag. De context variabele die wordt doorgegeven via de aanvraag- en antwoordpijplijn, wordt uitgebreid met de GraphQL-context wanneer deze wordt gebruikt met een GraphQL-resolver.

Context. GraphQL.parent

Het context.GraphQL.parent is ingesteld op het bovenliggende object voor de huidige uitvoering van de resolver. Houd rekening met het volgende gedeeltelijke schema:

type Comment {
    id: ID!
    owner: string!
    content: string!
}

type Blog {
    id: ID!
    title: string!
    content: string!
    comments: [Comment]!
    comment(id: ID!): Comment
}

type Query {
    getBlog(): [Blog]!
    getBlog(id: ID!): Blog
}

Overweeg ook een GraphQL-query voor alle informatie voor een specifiek blog:

query {
    getBlog(id: 1) {
        title
        content
        comments {
            id
            owner
            content
        }
    }
}

Als u een resolver instelt voor het comments veld in het Blog type, wilt u weten welke blog-id moet worden gebruikt. U kunt de id van het blog ophalen met behulp context.GraphQL.Parent["id"] van de volgende resolver:

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>@($"https://data.contoso.com/api/blog/{context.GraphQL.Parent["id"]}")
        </set-url>
    </http-request>
</http-data-source>

Context. GraphQL.Arguments

De argumenten voor een geparameteriseerde GraphQL-query worden toegevoegd aan context.GraphQL.Arguments. Denk bijvoorbeeld aan de volgende twee query's:

query($id: Int) {
    getComment(id: $id) {
        content
    }
}

query {
    getComment(id: 2) {
        content
    }
}

Deze query's zijn twee manieren om de getComment resolver aan te roepen. GraphQL verzendt de volgende JSON-nettolading:

{
    "query": "query($id: Int) { getComment(id: $id) { content } }",
    "variables": { "id": 2 }
}

{
    "query": "query { getComment(id: 2) { content } }"
}

U kunt de resolver als volgt definiëren:

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>@($"https://data.contoso.com/api/comment/{context.GraphQL.Arguments["id"]}")</set-url>
    </http-request>
</http-data-source>

Volgende stappen

Zie voor meer voorbeelden van resolver: