HTTP-Datenquelle für einen Auflöser
GILT FÜR: Alle API Management-Ebenen
Die http-data-source
-Auflöserrichtlinie konfiguriert die HTTP-Anforderung und optional die HTTP-Antwort, um Daten für einen Objekttyp und ein Feld in einem GraphQL-Schema aufzulösen. Das Schema muss als GraphQL-API in API Management importiert werden.
Hinweis
Legen Sie die Elemente und untergeordneten Elemente einer Richtlinie in der Reihenfolge fest, die in der Richtlinienanweisung angegeben ist. Erfahren Sie mehr darüber, wie Sie API Management-Richtlinien festlegen oder bearbeiten.
Richtlinienanweisung
<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>
Elemente
Name | BESCHREIBUNG | Erforderlich |
---|---|---|
http-request | Gibt eine URL und untergeordnete Richtlinien an, um die HTTP-Anforderung des Resolvers zu konfigurieren. | Ja |
Back-End | Leitet optional die HTTP-Anforderung des Resolvers an einen Back-End-Dienst weiter, sofern angegeben. | Nein |
http-response | Gibt optional untergeordnete Richtlinien an, um die HTTP-Antwort des Resolvers zu konfigurieren. Wenn die Antwort nicht angegeben ist, wird sie als Rohzeichenfolge zurückgegeben. | Nein |
http-request-Elemente
Hinweis
Sofern nicht anders angegeben, darf jedes untergeordnete Element höchstens einmal festgelegt werden. Geben Sie Elemente in der aufgeführten Reihenfolge an.
Element | BESCHREIBUNG | Erforderlich |
---|---|---|
get-authorization-context | Ruft einen Autorisierungskontext für die HTTP-Anforderung des Resolvers ab. | Nein |
set-backend-service | Leitet die HTTP-Anforderung des Resolvers an das angegebene Back-End um. | Nein |
include-fragment | Fügt ein Richtlinienfragment in die Richtliniendefinition ein. Wenn mehrere Fragmente vorhanden sind, fügen Sie zusätzliche include-fragment -Elemente hinzu. |
Nein |
set-method | Legt die Methode der HTTP-Anforderung des Auflösers fest. | Ja |
set-url | Die URL der HTTP-Anforderung des Auflösers. | Ja |
set-header | Legt einen Header in der HTTP-Anforderung des Auflösers fest. Wenn mehrere Header vorhanden sind, fügen Sie zusätzliche header -Elemente hinzu. |
Nein |
set-body | Legt den Text in der HTTP-Anforderung des Auflösers fest. | Nein |
authentication-certificate | Authentifiziert sich mithilfe eines Clientzertifikats in der HTTP-Anforderung des Auflösers. | Nein |
Back-End-Element
Element | BESCHREIBUNG | Erforderlich |
---|---|---|
forward-request | Leitet die HTTP-Anforderung des Resolvers an einen konfigurierten Back-End-Dienst weiter. | Nein |
http-response-Elemente
Hinweis
Sofern nicht anders angegeben, darf jedes untergeordnete Element höchstens einmal festgelegt werden. Geben Sie Elemente in der aufgeführten Reihenfolge an.
Name | BESCHREIBUNG | Erforderlich |
---|---|---|
set-body | Legt den Text in der HTTP-Antwort des Auflösers fest. | Nein |
xml-to-json | Transformiert die HTTP-Antwort des Auflösers von XML in JSON. | Nein |
find-and-replace | Sucht eine Teilzeichenfolge in der HTTP-Antwort des Auflösers und ersetzt sie durch eine andere Teilzeichenfolge. | Nein |
publish-event | Veröffentlicht ein Ereignis für ein oder mehrere Abonnements, die im GraphQL-API-Schema angegeben sind. | Nein |
include-fragment | Fügt ein Richtlinienfragment in die Richtliniendefinition ein. Wenn mehrere Fragmente vorhanden sind, fügen Sie zusätzliche include-fragment -Elemente hinzu. |
Nein |
Verwendung
- Richtlinienbereiche: GraphQL-Auflöser
- Gateways: klassisch, v2, Verbrauch
Hinweise zur Verwendung
- Informationen zum Konfigurieren und Verwalten eines Resolvers mit dieser Richtlinie finden Sie unter Konfigurieren eines GraphQL-Resolvers.
- Diese Richtlinie wird nur aufgerufen, wenn ein einzelnes Feld in einem übereinstimmenden GraphQL-Vorgangstyp im Schema aufgelöst wird.
Beispiele
Resolver für die GraphQL-Abfrage
Im folgenden Beispiel wird eine Abfrage aufgelöst, indem ein HTTP-GET
-Aufruf an eine Back-End-Datenquelle ausgeführt wird.
Beispielschema
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Beispielrichtlinie
<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 für eine GraphQL-Abfrage, die unter Verwendung einer Liquid-Vorlage eine Liste zurückgibt
Im folgenden Beispiel wird eine Liquid-Vorlage verwendet, die zum Verwenden in der set-body-Richtlinie unterstützt wird, um in der HTTP-Antwort auf eine Abfrage eine Liste zurückzugeben. Außerdem wird das username
Feld in der Antwort der REST-API in die GraphQL-Antwort name
umbenannt.
Beispielschema
type Query {
users: [User]
}
type User {
id: String!
name: String!
}
Beispielrichtlinie
<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 für eine GraphQL-Mutation
Im folgenden Beispiel wird eine Mutation aufgelöst, die Daten einfügt, indem sie eine POST
-Anforderung an eine HTTP-Datenquelle stellt. Der Richtlinienausdruck in der set-body
-Richtlinie der HTTP-Anforderung ändert ein name
-Argument, das in der GraphQL-Abfrage als deren Textkörper übergeben wird. Der gesendete Text sieht wie die folgende JSON aus:
{
"name": "the-provided-name"
}
Beispielschema
type Query {
users: [User]
}
type Mutation {
makeUser(name: String!): User
}
type User {
id: String!
name: String!
}
Beispielrichtlinie
<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 für einen GraphQL-Union-Typ
Im folgenden Beispiel wird die orderById
-Abfrage aufgelöst, indem ein HTTP-GET
-Aufruf an eine Back-End-Datenquelle gesendet und ein JSON-Objekt zurückgegeben wird, das die Kunden-ID und den Typ enthält. Der Kundentyp ist eine Union aus den Typen RegisteredCustomer
und GuestCustomer
.
Beispielschema
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!
}
Beispielrichtlinie
In diesem Beispiel simulieren wir die Kundenergebnisse aus einer externen Quelle und hartcodieren die abgerufenen Ergebnisse in der Richtlinie set-body
. Das Feld __typename
wird verwendet, um den Typ des Kunden zu bestimmen.
<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>
Verwandte Richtlinien
Zugehöriger Inhalt
Weitere Informationen zum Arbeiten mit Richtlinien finden Sie hier:
- Tutorial: Transformieren und Schützen Ihrer API
- Unter Richtlinien für die API-Verwaltung finden Sie eine komplette Liste der Richtlinienanweisungen und der zugehörigen Einstellungen.
- Richtlinienausdrücke
- Festlegen oder Bearbeiten von Richtlinien
- Wiederverwenden von Richtlinienkonfigurationen
- Repository für Richtliniencodeausschnitte
- Azure API Management-Richtlinientoolkit
- Erstellen von Richtlinien mit Microsoft Copilot in Azure