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
- Beleidsbereiken: GraphQL-resolver
- Gateways: klassiek, v2, verbruik
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>
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 hun instellingen
- Beleidsexpressies
- Beleid instellen of bewerken
- Beleidsconfiguraties opnieuw gebruiken
- Beleidsfragmentenopslagplaats
- Beleid ontwerpen met Behulp van Microsoft Copilot in Azure