Konfigurieren eines GraphQL-Resolvers
GILT FÜR: Alle API Management-Ebenen
Konfigurieren des Resolvers zum Abrufen oder Festlegen von Daten für ein GraphQL-Feld in einem Objekttyp, der in einem GraphQL-Schema angegeben ist. Das Schema muss als GraphQL-API in API Management importiert werden.
Hinweis
Dieses Feature ist derzeit in Arbeitsbereichen nicht verfügbar.
Derzeit unterstützt API Management Resolver, die auf die folgenden Datenquellen zugreifen können:
- HTTP-basierte Datenquelle (REST oder SOAP API)
- Cosmos DB-Datenbank
- Azure SQL-Datenbank
Wichtige Hinweise
- Ein Resolver ist eine Ressource, die eine Richtliniendefinition enthält, die nur aufgerufen wird, wenn ein übereinstimmender Objekttyp und ein entsprechendes Feld im Schema ausgeführt wird.
- Jeder Resolver löst Daten für ein einzelnes Feld auf. Um Daten für mehrere Felder aufzulösen, konfigurieren Sie jeweils einen separaten Resolver.
- Resolverbezogene Richtlinien werden nach den Richtlinien
inbound
undbackend
in der Richtlinienausführungspipeline ausgewertet. Sie erben keine Richtlinien von anderen Bereichen. Weitere Informationen finden Sie unter Richtlinien in API Management. - Sie können API-bezogene Richtlinien für eine GraphQL-API konfigurieren, unabhängig von den resolverbezogenen Richtlinien. Fügen Sie beispielsweise die Richtlinie validate-graphql-request zum Bereich
inbound
hinzu, damit die Anforderung vor dem Aufruf des Resolvers überprüft wird. Konfigurieren Sie API-bezogene Richtlinien auf der Registerkarte API-Richtlinien für die API. - Zur Unterstützung von Schnittstellen- und Union-Typen in GraphQL-Resolvern muss die Back-End-Antwort entweder bereits das Feld
__typename
enthalten oder mithilfe der set-body-Richtlinie geändert werden, sodass__typename
enthalten ist.
Voraussetzungen
- Eine bestehende API Management-Instanz. Erstellen Sie eine, falls nicht schon geschehen.
- Importieren Sie eine Passthrough- oder synthetische GraphQL-API.
Auswählen eines Resolvers
Mit den folgenden Schritten wird ein Resolver mithilfe einer HTTP-basierten Datenquelle erstellt. Die allgemeinen Schritte sind für alle Resolver ähnlich, die eine unterstützte Datenquelle verwenden.
Navigieren Sie im Azure-Portal zu Ihrer API Management-Instanz.
Wählen Sie im linken Menü APIs und dann den Namen Ihrer GraphQL-API.
Überprüfen Sie auf der Registerkarte Schema das Schema für ein Feld in einem Objekttyp, in dem Sie einen Resolver konfigurieren möchten.
Wählen Sie ein Feld aus, und fahren Sie dann mit dem Mauszeiger über den linken Rand.
Wählen Sie + Resolver hinzufügen aus.
Gehen Sie auf der Seite Resolver erstellen folgendermaßen vor:
- Aktualisieren Sie bei Bedarf die Eigenschaft Name, geben Sie optional eine Beschreibung ein, und bestätigen oder aktualisieren Sie die Auswahl für Typ und Feld.
- Wählen Sie die Datenquelle des Resolvers aus. Wählen Sie für dieses Beispiel HTTP API aus.
Aktualisieren Sie im Editor Resolver-Richtlinien die Richtlinie
http-data-source
mit untergeordneten Elementen für Ihr Szenario.Aktualisieren Sie das erforderliche Element
http-request
mit Richtlinien, um den GraphQL-Vorgang in eine HTTP-Anforderung zu transformieren.Fügen Sie optional ein Element
http-response
hinzu, und fügen Sie untergeordnete Richtlinien hinzu, um die HTTP-Antwort des Resolvers zu transformieren. Wenn das Elementhttp-response
nicht angegeben ist, wird die Antwort als Rohzeichenfolge zurückgegeben.Klicken Sie auf Erstellen.
Der Resolver wird an das Feld angefügt und auf der Registerkarte Resolver angezeigt.
Verwalten von Resolvern
Auf der Registerkarte Resolver einer GraphQL-API können Sie die Resolver der API auflisten und verwalten.
Gehen Sie auf der Registerkarte Resolver folgendermaßen vor:
Die Spalte Verknüpft gibt an, ob der Resolver für ein Feld konfiguriert ist, das sich derzeit im GraphQL-Schema befindet. Wenn ein Resolver nicht verknüpft ist, kann er nicht aufgerufen werden.
Suchen Sie im Kontextmenü (...) für einen Resolver nach den Befehlen zum Klonen, Bearbeiten oder Löschen eines Resolvers. Klonen Sie einen aufgelisteten Resolver, um schnell einen ähnlichen Resolver zu erstellen, der auf einen anderen Typ und ein anderes Feld ausgerichtet ist.
Durch Auswahl von + Erstellen können Sie einen neuen Resolver erstellen.
Bearbeiten und Testen eines Resolvers
Wenn Sie einen einzelnen Resolver bearbeiten, wird die Seite Resolver bearbeiten geöffnet. Sie können Folgendes ausführen:
Aktualisieren Sie die Resolverrichtlinie und optional die Datenquelle. Das Ändern der Datenquelle überschreibt die aktuelle Resolverrichtlinie.
Ändern Sie den Typ und das Feld, auf den/das der Resolver ausgerichtet ist.
Testen und debuggen Sie die Konfiguration des Resolvers. Wählen Sie beim Bearbeiten der Resolverrichtlinie Test ausführen aus, um die Ausgabe der Datenquelle zu überprüfen. Diese können Sie anhand des Schemas validieren. Wenn Fehler auftreten, enthält die Antwort Informationen zur Problembehandlung.
GraphQL-Kontext
- Der Kontext für die Anforderung und Antwort des Resolvers (falls angegeben) unterscheidet sich vom Kontext für die ursprüngliche Gateway-API-Anforderung:
context.GraphQL
-Eigenschaften werden für die aktuelle Resolverausführung auf die Argumente (Arguments
) und das übergeordnete Objekt (Parent
) festgelegt.- Der Anforderungskontext enthält Argumente, die in der GraphQL-Abfrage als deren Textkörper übergeben werden.
- Beim Antwortkontext handelt es sich um die Antwort des unabhängigen 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 einem GraphQL-Resolver verwendet wird.
context.GraphQL.parent
Das context.GraphQL.parent
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 Resolver für das Feld comments
im Typ Blog
festlegen, sollten Sie wissen, welche Blog-ID verwendet werden soll. Sie können die ID des Blogs mit context.GraphQL.Parent["id"]
abrufen, wie im folgenden Resolver gezeigt:
<http-data-source>
<http-request>
<set-method>GET</set-method>
<set-url>@($"https://data.contoso.com/api/blog/{context.GraphQL.Parent["id"]}")
</set-url>
</http-request>
</http-data-source>
context.GraphQL.Arguments
Die Argumente für eine parametrisierte GraphQL-Abfrage werden zu context.GraphQL.Arguments
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 } }"
}
Sie können den Auflösungsgeber wie folgt definieren:
<http-data-source>
<http-request>
<set-method>GET</set-method>
<set-url>@($"https://data.contoso.com/api/comment/{context.GraphQL.Arguments["id"]}")</set-url>
</http-request>
</http-data-source>
Nächste Schritte
Weitere Resolverbeispiele finden Sie unter: