Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
GÄLLER FÖR: Alla API Management-nivåer
Matchningsprincipen http-data-source
konfigurerar HTTP-begäran och om du vill kan HTTP-svaret matcha data för en objekttyp och ett fält i ett GraphQL-schema. Schemat måste importeras till API Management som ett GraphQL-API.
Kommentar
Ange principens element och underordnade element i den ordning som anges i principbeskrivningen. Läs mer om hur du anger eller redigerar API Management-principer.
Principuttryck
<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>
Element
Namn | beskrivning | Obligatoriskt |
---|---|---|
HTTP-förfrågan | Anger en URL och underordnade principer för att konfigurera matcharens HTTP-begäran. | Ja |
bakgrundssystem | Du kan också vidarebefordra matcharens HTTP-begäran till en serverdelstjänst, om det anges. | Nej |
http-svar | Du kan också ange underordnade principer för att konfigurera matcharens HTTP-svar. Om inget anges returneras svaret som en råsträng. | Nej |
http-request-element
Kommentar
Förutom där det anges kan varje underordnat element anges högst en gång. Ange element i den ordning som anges.
Komponent | beskrivning | Obligatoriskt |
---|---|---|
get-authorization-context | Hämtar en auktoriseringskontext för matcharens HTTP-begäran. | Nej |
set-backend-service | Omdirigerar matcharens HTTP-begäran till den angivna serverdelen. | Nej |
include-fragment | Infogar ett principfragment i principdefinitionen. Om det finns flera fragment lägger du till ytterligare include-fragment element. |
Nej |
inställningsmetod | Anger metoden för matcharens HTTP-begäran. | Ja |
set-url | Anger URL:en för matcharens HTTP-begäran. | Ja |
set-header | Anger ett huvud i matcharens HTTP-begäran. Om det finns flera rubriker lägger du till ytterligare header element. |
Nej |
set-body | Anger brödtexten i matcharens HTTP-begäran. | Nej |
authentication-certificate | Autentiserar med ett klientcertifikat i matcharens HTTP-begäran. | Nej |
serverdelselement
Komponent | beskrivning | Obligatoriskt |
---|---|---|
forward-request | Vidarebefordrar matcharens HTTP-begäran till en konfigurerad serverdelstjänst. | Nej |
http-response-element
Kommentar
Förutom där det anges kan varje underordnat element anges högst en gång. Ange element i den ordning som anges.
Namn | beskrivning | Obligatoriskt |
---|---|---|
set-body | Anger brödtexten i matcharens HTTP-svar. | Nej |
xml-to-json | Transformerar matcharens HTTP-svar från XML till JSON. | Nej |
sök-och-ersätt | Hittar en delsträng i matcharens HTTP-svar och ersätter den med en annan delsträng. | Nej |
publish-event | Publicerar en händelse till en eller flera prenumerationer som anges i GraphQL API-schemat. | Nej |
include-fragment | Infogar ett principfragment i principdefinitionen. Om det finns flera fragment lägger du till ytterligare include-fragment element. |
Nej |
Förbrukning
- Principomfattningar: GraphQL-matchare
- Gatewayer: klassisk, v2, förbrukning
Användningsanteckningar
- Information om hur du konfigurerar och hanterar en lösning med den här principen finns i Konfigurera en GraphQL-matchare.
- Den här principen anropas endast när du löser ett enda fält i en matchande GraphQL-åtgärdstyp i schemat.
Exempel
Lösare för GraphQL-fråga
Följande exempel löser en fråga genom att göra ett HTTP-anrop GET
till en serverdelsdatakälla.
Exempelschema
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Exempelprincip
<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>
Lösare för en GraphQL-fråga som returnerar en lista med hjälp av en flytande mall
I följande exempel används en flytande mall som stöds för användning i set-body-principen för att returnera en lista i HTTP-svaret på en fråga. Det byter också namn på fältet username
i svaret från REST-API:et till name
i GraphQL-svaret.
Exempelschema
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Exempelprincip
<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>
Lösning för GraphQL-mutation
I följande exempel löses en mutation som infogar data genom att göra en POST
begäran till en HTTP-datakälla. Principuttrycket i principen för set-body
HTTP-begäran ändrar ett name
argument som skickas i GraphQL-frågan som dess brödtext. Brödtexten som skickas ser ut som följande JSON:
{
"name": "the-provided-name"
}
Exempelschema
type Query {
users: [User]
}
type Mutation {
makeUser(name: String!): User
}
type User {
id: String!
name: String!
}
Exempelprincip
<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>
Lösare för GraphQL-uniontyp
Följande exempel löser orderById
frågan genom att göra ett HTTP-anrop GET
till en serverdelsdatakälla och returnerar ett JSON-objekt som innehåller kund-ID och typ. Kundtypen är en union av RegisteredCustomer
och GuestCustomer
typer.
Exempelschema
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!
}
Exempelprincip
I det här exemplet hånar vi kundens resultat från en extern källa och hårdkodar de hämtade resultaten i set-body
principen. Fältet __typename
används för att fastställa kundens typ.
<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>
Relaterade principer
Relaterat innehåll
Mer information om hur du arbetar med principer finns i:
- Självstudie: Transformera och skydda ditt API
- Principreferens för en fullständig lista över principinstruktioner och deras inställningar
- Principuttryck
- Ange eller redigera principer
- Återanvända principkonfigurationer
- Lagringsplats för principfragment
- Lagringsplats för principlekplats
- Principverktyg för Azure API Management
- Få Hjälp med Copilot för att skapa, förklara och felsöka principer