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.
Notitie
Deze functie is momenteel niet beschikbaar in werkruimten.
Momenteel biedt API Management ondersteuning voor resolvers die toegang hebben tot de volgende gegevensbronnen:
- Op HTTP gebaseerde gegevensbron (REST of SOAP API)
- Cosmos DB-database
- Azure SQL database (Azure SQL-database)
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
beleidbackend
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. - Ter ondersteuning van interface- en samenvoegtypen in GraphQL-resolvers moet het back-endantwoord al het
__typename
veld bevatten of worden gewijzigd met behulp van het setbody-beleid dat moet worden opgenomen__typename
.
Vereisten
- Een bestaand API Management-exemplaar. Maak er een als u dat nog niet hebt gedaan.
- Importeer een passthrough - of synthetische GraphQL-API.
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.
Blader in Azure Portal naar uw API Management-exemplaar.
Selecteer API's in het linkermenu en vervolgens de naam van uw GraphQL-API.
Controleer op het tabblad Schema het schema voor een veld in een objecttype waar u een resolver wilt configureren.
Selecteer een veld en plaats de aanwijzer in de linkermarge.
Selecteer + Resolver toevoegen.
Op de pagina Resolver maken:
- Werk de eigenschap Naam desgewenst bij, voer desgewenst een beschrijving in en bevestig of werk de selecties Type en Veld bij.
- Selecteer de gegevensbron van de resolver. Selecteer voor dit voorbeeld HTTP-API.
Werk in de beleidseditor van Resolver het
http-data-source
beleid bij met onderliggende elementen voor uw scenario.Werk het vereiste
http-request
element bij met beleidsregels om de GraphQL-bewerking te transformeren naar een HTTP-aanvraag.Voeg eventueel een
http-response
element toe en voeg onderliggend beleid toe om het HTTP-antwoord van de resolver te transformeren. Als hethttp-response
element niet is opgegeven, wordt het antwoord geretourneerd als een onbewerkte tekenreeks.Selecteer Maken.
De resolver is gekoppeld aan het veld en wordt weergegeven op het tabblad Resolvers .
Resolvers beheren
De resolvers voor een GraphQL-API weergeven en beheren op het tabblad Resolvers van de API.
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.
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: