GraphQL-resolver instellen (buiten gebruik gesteld)
Belangrijk
- Het
set-graphql-resolver
beleid wordt buiten gebruik gesteld. Klanten die hetset-graphql-resolver
beleid gebruiken, moeten migreren naar de beheerde resolvers voor GraphQL-API's, die verbeterde functionaliteit bieden. - Nadat u een beheerde resolver voor een GraphQL-veld hebt geconfigureerd, slaat de gateway het
set-graphql-resolver
beleid over in beleidsdefinities. U kunt het gebruik van beheerde resolvers en hetset-graphql-resolver
beleid in uw API Management-exemplaar niet combineren.
Met set-graphql-resolver
het beleid worden gegevens opgehaald of ingesteld voor een GraphQL-veld in een objecttype dat is opgegeven in een GraphQL-schema. Het schema moet worden geïmporteerd in API Management. Momenteel moeten de gegevens worden omgezet met behulp van een HTTP-gegevensbron (REST of SOAP API).
Notitie
Stel de elementen van het beleid en onderliggende elementen in de volgorde in die is opgegeven in de beleidsverklaring. Meer informatie over het instellen of bewerken van API Management beleid.
Beleidsverklaring
<set-graphql-resolver parent-type="type" field="field">
<http-data-source>
<http-request>
<set-method>...set-method policy configuration...</set-method>
<set-url>URL</set-url>
<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>
<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>
</http-response>
</http-data-source>
</set-graphql-resolver>
Kenmerken
Kenmerk | Beschrijving | Vereist | Standaard |
---|---|---|---|
bovenliggend type | Een objecttype in het GraphQL-schema. | Ja | N.v.t. |
veld | Een veld van de die is opgegeven parent-type in het GraphQL-schema. |
Ja | N.v.t. |
Notitie
Momenteel worden de waarden van parent-type
en field
niet gevalideerd door dit beleid. Als ze niet geldig zijn, wordt het beleid genegeerd en wordt de GraphQL-query doorgestuurd naar een GraphQL-eindpunt (als dit is geconfigureerd).
Elementen
Naam | Beschrijving | Vereist |
---|---|---|
http-gegevensbron | Hiermee configureert u de HTTP-aanvraag en optioneel het HTTP-antwoord dat wordt gebruikt voor het oplossen van gegevens voor de opgegeven parent-type en field . |
Yes |
http-aanvraag | Hiermee geeft u een URL en onderliggend beleid voor het configureren van de HTTP-aanvraag van de resolver. | Yes |
http-antwoord | Geeft desgewenst 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. |
HTTP-aanvraagelementen
Notitie
Behalve waar aangegeven, kan elk onderliggend element maximaal één keer worden opgegeven. Geef elementen op in de aangegeven volgorde.
Element | Beschrijving | Vereist |
---|---|---|
set-method | Hiermee stelt u de methode van de HTTP-aanvraag van de resolver in. | Yes |
set-url | Hiermee stelt u de URL van de HTTP-aanvraag van de resolver. | Yes |
set-header | Hiermee stelt u een header in de HTTP-aanvraag van de resolver. Als er meerdere kopteksten zijn, voegt u extra header elementen toe. |
No |
hoofdtekst instellen | Hiermee stelt u de hoofdtekst in de HTTP-aanvraag van de resolver in. | No |
verificatiecertificaat | Verifieert met behulp van een clientcertificaat in de HTTP-aanvraag van de resolver. | No |
http-response-elementen
Notitie
Elk onderliggend element kan maximaal één keer worden opgegeven. Geef elementen op in de aangegeven volgorde.
Naam | Beschrijving | Vereist |
---|---|---|
hoofdtekst instellen | Hiermee stelt u de hoofdtekst in het HTTP-antwoord van de resolver. | No |
xml-to-json | Transformeert het HTTP-antwoord van de resolver van XML naar JSON. | No |
zoeken en vervangen | Zoekt een subtekenreeks in het HTTP-antwoord van de resolver en vervangt deze door een andere subtekenreeks. | No |
Gebruik
- Beleidssecties: back-end
- Beleidsbereiken: globaal, werkruimte, product, API, bewerking
- Gateways: toegewezen
Gebruiksopmerkingen
- Dit beleid wordt alleen aangeroepen wanneer een overeenkomende GraphQL-query wordt uitgevoerd.
- Met het beleid worden gegevens voor één veld omgezet. Als u gegevens voor meerdere velden wilt oplossen, configureert u meerdere exemplaren van dit beleid in een beleidsdefinitie.
GraphQL-context
- De context voor de HTTP-aanvraag en het HTTP-antwoord (indien opgegeven) verschilt van de context voor de oorspronkelijke gateway-API-aanvraag:
context.ParentResult
is ingesteld op het bovenliggende object voor de huidige uitvoering van de resolver.- De http-aanvraagcontext bevat argumenten die als hoofdtekst worden doorgegeven in de GraphQL-query.
- De HTTP-antwoordcontext is het antwoord van de onafhankelijke HTTP-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<set-graphql-resolver>
beleid.
ParentResult
De context.ParentResult
is ingesteld op het bovenliggende object voor de huidige uitvoering van de resolver. Bekijk 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 parent-type="Blog" field="comments"
, wilt u weten welke blog-id u moet gebruiken. U kunt de id van de blog ophalen met behulp van context.ParentResult.AsJObject()["id"].ToString()
. Het beleid voor het configureren van deze resolver ziet er ongeveer als volgt uit:
<set-graphql-resolver parent-type="Blog" field="comments">
<http-data-source>
<http-request>
<set-method>GET</set-method>
<set-url>@{
var blogId = context.ParentResult.AsJObject()["id"].ToString();
return $"https://data.contoso.com/api/blog/{blogId}";
}</set-url>
</http-request>
</http-data-source>
</set-graphql-resolver>
Argumenten
De argumenten voor een GraphQL-query met parameters worden toegevoegd aan de hoofdtekst van de aanvraag. Neem bijvoorbeeld 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 } }"
}
Wanneer de resolver wordt uitgevoerd, wordt de arguments
eigenschap toegevoegd aan de hoofdtekst. U kunt de resolver als volgt definiëren:
<set-graphql-resolver parent-type="Blog" field="comments">
<http-data-source>
<http-request>
<set-method>GET</set-method>
<set-url>@{
var commentId = context.Request.Body.As<JObject>(true)["arguments"]["id"];
return $"https://data.contoso.com/api/comment/{commentId}";
}</set-url>
</http-request>
</http-data-source>
</set-graphql-resolver>
Meer voorbeelden
Resolver voor GraphQL-query
In het volgende voorbeeld wordt een query omgezet door een HTTP-aanroep GET
naar een back-endgegevensbron te maken.
Voorbeeldschema
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Voorbeeldbeleid
<set-graphql-resolver parent-type="Query" field="users">
<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>
</set-graphql-resolver>
Resolver voor een GraqhQL-query die een lijst retourneert met behulp van een vloeibare sjabloon
In het volgende voorbeeld wordt een vloeibare sjabloon gebruikt, ondersteund voor gebruik in het set-body-beleid , om een lijst te retourneren in het HTTP-antwoord op een query. De naam van het username
veld in het antwoord van de REST API name
wordt ook gewijzigd in in het GraphQL-antwoord.
Voorbeeldschema
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Voorbeeldbeleid
<set-graphql-resolver parent-type="Query" field="users">
<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>
</set-graphql-resolver>
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 in de GraphQL-query als hoofdtekst wordt doorgegeven. 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
<set-graphql-resolver parent-type="Mutation" field="makeUser">
<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.Request.Body.As<JObject>(true)["arguments"];
JObject jsonObject = new JObject();
jsonObject.Add("name", args["name"])
return jsonObject.ToString();
}</set-body>
</http-request>
</http-data-source>
</set-graphql-resolver>
Gerelateerd beleid
Gerelateerde inhoud
Zie voor meer informatie over het werken met beleid:
- Zelfstudie: Uw API transformeren en beveiligen
- Beleidsreferentie voor een volledige lijst met beleidsinstructies en de bijbehorende instellingen
- Beleidsexpressies
- Beleid instellen of bewerken
- Beleidsconfiguraties opnieuw gebruiken
- Opslagplaats voor beleidsfragmenten
- Beleid ontwerpen met Behulp van Microsoft Copilot voor Azure