Set GraphQL Resolver (eingestellt)
Wichtig
- Die Richtlinie „
set-graphql-resolver
“ wird eingestellt. Kunden, die die Richtlinie „set-graphql-resolver
“ verwenden, müssen zu den verwalteten Resolvern für GraphQL-APIs migrieren, die erweiterte Funktionen bieten. - Nachdem Sie einen verwalteten Resolver für ein GraphQL-Feld konfiguriert haben, überspringt das Gateway die Richtlinie „
set-graphql-resolver
“ in allen Richtliniendefinitionen. Sie können die Verwendung von verwalteten Resolvern und der Richtlinieset-graphql-resolver
in Ihrer API Management-Instanz nicht kombinieren.
Die set-graphql-resolver
-Richtlinie ruft Daten ab oder legt sie für ein GraphQL-Feld in einem Objekttyp fest, der in einem GraphQL-Schema angegeben ist. Das Schema muss in das API Management importiert werden. Derzeit müssen die Daten mithilfe einer HTTP-basierten Datenquelle (REST- oder SOAP-API) aufgelöst 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
<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>
Attribute
attribute | BESCHREIBUNG | Erforderlich | Standard |
---|---|---|---|
parent-type | Ein Objekttyp im GraphQL-Schema | Ja | – |
Feld | Ein Feld des angegebenen parent-type im GraphQL-Schema |
Ja | – |
Hinweis
Derzeit werden die Werte parent-type
und field
nicht von dieser Richtlinie überprüft. Wenn sie ungültig sind, wird die Richtlinie ignoriert, und die GraphQL-Abfrage wird an einen GraphQL-Endpunkt weitergeleitet, falls einer konfiguriert ist.
Elemente
Name | BESCHREIBUNG | Erforderlich |
---|---|---|
http-data-source | Konfiguriert die HTTP-Anforderung und optional die HTTP-Antwort, die zum Auflösen von Daten für die angegebenen parent-type und field verwendet werden |
Yes |
http-request | Gibt eine URL und untergeordnete Richtlinien an, um die HTTP-Anforderung des Resolvers zu konfigurieren. | Ja |
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. |
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 |
---|---|---|
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 |
http-response-Elemente
Hinweis
Jedes untergeordnete Element kann höchstens einmal angegeben 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 |
Verwendung
- Richtlinienabschnitte: backend
- Richtlinienbereiche: global, Arbeitsbereich, Produkt, API, Vorgang
- Gateways: dedicated
Hinweise zur Verwendung
- Diese Richtlinie wird nur aufgerufen, wenn eine übereinstimmende GraphQL-Abfrage ausgeführt wird.
- Die Richtlinie löst Daten für ein einzelnes Feld auf. Um Daten für mehrere Felder aufzulösen, konfigurieren Sie mehrere Instanzen dieser Richtlinie in einer Richtliniendefinition.
GraphQL-Kontext
- Der Kontext für die HTTP-Anforderung und die HTTP-Antwort (falls angegeben) unterscheidet sich vom Kontext für die ursprüngliche Gateway-API-Anforderung:
context.ParentResult
wird auf das übergeordnete Objekt für die aktuelle Auflösungsausführung festgelegt.- Der HTTP-Anforderungskontext enthält Argumente, die in der GraphQL-Abfrage als deren Textkörper übergeben werden.
- Beim HTTP-Antwortkontext handelt es sich um die Antwort des unabhängigen HTTP-Aufrufs des Resolvers, nicht um den Kontext für die vollständige Antwort für die Gatewayanforderung.
Die
context
-Variable, die über die Anforderungs- und Antwortpipeline übergeben wird, wird mit dem GraphQL-Kontext erweitert, wenn sie mit<set-graphql-resolver>
-Richtlinien verwendet werden.
ParentResult
Das context.ParentResult
wird auf das übergeordnete Objekt für die aktuelle Auflösungsausführung festgelegt. Betrachten Sie folgendes partielles 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
}
Berücksichtigen Sie auch eine GraphQL-Abfrage für alle Informationen für einen bestimmten Blog:
query {
getBlog(id: 1) {
title
content
comments {
id
owner
content
}
}
}
Wenn Sie einen Auflösungsgeber für parent-type="Blog" field="comments"
festlegen, möchten Sie verstehen, welche Blog-ID verwendet werden soll. Sie können die ID des Blogs mithilfe von context.ParentResult.AsJObject()["id"].ToString()
erhalten. Die Richtlinie zum Konfigurieren dieses Lösungsgebers würde wie folgt aussehen:
<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>
Argumente
Die Argumente für eine parameterisierte GraphQL-Abfrage werden dem Textkörper der Anforderung hinzugefügt. Sehen Sie sich beispielsweise die folgenden zwei Abfragen an:
query($id: Int) {
getComment(id: $id) {
content
}
}
query {
getComment(id: 2) {
content
}
}
Diese Abfragen sind zwei Möglichkeiten zum Aufrufen des getComment
-Auflösungsgebers. GraphQL sendet die folgende JSON-Nutzlast:
{
"query": "query($id: Int) { getComment(id: $id) { content } }",
"variables": { "id": 2 }
}
{
"query": "query { getComment(id: 2) { content } }"
}
Wenn der Auflösungsgeber ausgeführt wird, wird die Eigenschaft arguments
dem Textkörper hinzugefügt. Sie können den Auflösungsgeber wie folgt definieren:
<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>
Weitere Beispiele anzeigen
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
<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 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
<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 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
<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>
Verwandte Richtlinien
Verwandte Inhalte
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
- Erstellen von Richtlinien mithilfe von Microsoft Copilot für Azure