HTTP-datakälla för en matchare
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
Name | beskrivning | Obligatoriskt |
---|---|---|
http-request | Anger en URL och underordnade principer för att konfigurera matcharens HTTP-begäran. | Ja |
backend | Du kan också vidarebefordra matcharens HTTP-begäran till en serverdelstjänst, om det anges. | Nej |
http-response | 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.
Element | Description | 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 |
set-method | 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
Element | Description | 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.
Name | 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 |
find-and-replace | 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
- Principverktyg för Azure API Management
- Skapa principer med Microsoft Copilot i Azure