Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
AWS AppSync JavaScript Übersicht über Resolver
AWS AppSync ermöglicht es Ihnen, auf GraphQL-Anfragen zu antworten, indem Sie Operationen an Ihren Datenquellen ausführen. Für jedes GraphQL-Feld, für das Sie eine Abfrage, Mutation oder ein Abonnement ausführen möchten, muss ein Resolver angehängt werden.
Resolver sind die Verbindungen zwischen GraphQL und einer Datenquelle. Sie erklären, AWS AppSync wie Sie eine eingehende GraphQL-Anfrage in Anweisungen für Ihre Backend-Datenquelle übersetzen und wie Sie die Antwort von dieser Datenquelle zurück in eine GraphQL-Antwort übersetzen. Mit AWS AppSync können Sie Ihre Resolver mithilfe der () -Umgebung schreiben JavaScript und sie in dieser ausführen. AWS AppSync APPSYNC_JS
AWS AppSync ermöglicht es Ihnen, Unit-Resolver oder Pipeline-Resolver zu schreiben, die aus mehreren AWS AppSync Funktionen in einer Pipeline bestehen.
Unterstützte Runtime-Funktionen
Die AWS AppSync JavaScript Runtime bietet eine Teilmenge von JavaScript Bibliotheken, Dienstprogrammen und Funktionen. Eine vollständige Liste der Features und Funktionen, die von der Runtime unterstützt werden, finden Sie unter APPSYNC_JS
JavaScript Runtime-Features für Resolver und Funktionen.
Resolver für Einheiten
Ein Unit-Resolver besteht aus Code, der einen Anforderungs- und Antworthandler definiert, die für eine Datenquelle ausgeführt werden. Der Anforderungshandler verwendet ein Kontextobjekt als Argument und gibt die Anforderungsnutzdaten zurück, die zum Aufrufen Ihrer Datenquelle verwendet wurden. Der Antworthandler erhält von der Datenquelle eine Nutzlast mit dem Ergebnis der ausgeführten Anfrage zurück. Der Response-Handler wandelt die Nutzlast in eine GraphQL-Antwort um, um das GraphQL-Feld aufzulösen. Im folgenden Beispiel ruft ein Resolver ein Element aus einer DynamoDB-Datenquelle ab:
import * as ddb from '@aws-appsync/utils/dynamodb' export function request(ctx) { return ddb.get({ key: { id: ctx.args.id } }); } export const response = (ctx) => ctx.result;
Aufbau eines Pipeline-Resolvers JavaScript
Ein Pipeline-Resolver besteht aus Code, der einen Anfrage- und Antworthandler sowie eine Liste von Funktionen definiert. Jede Funktion hat einen Anforderungs - und Antworthandler, den sie für eine Datenquelle ausführt. Da ein Pipeline-Resolver Läufe an eine Liste von Funktionen delegiert, ist er daher mit keiner Datenquelle verknüpft. Unit-Resolver und -Funktionen sind Primitive, die Operation auf Datenquellen auszuführen.
Anforderungshandler für Pipeline-Resolver
Der Anforderungshandler eines Pipeline-Resolvers (der vorherige Schritt) ermöglicht es Ihnen, einige Vorbereitungslogik durchzuführen, bevor Sie die definierten Funktionen ausführen.
Funktionsliste
Die Liste der Funktionen eines Pipeline-Resolvers wird nacheinander ausgeführt. Das Evaluierungsergebnis des Pipeline-Resolver-Request-Handlers wird der ersten Funktion als zur Verfügung gestellt. ctx.prev.result
Jedes Ergebnis der Funktionsauswertung steht der nächsten Funktion als ctx.prev.result
zur Verfügung.
Antworthandler für den Pipeline-Resolver
Der Response-Handler eines Pipeline-Resolvers ermöglicht es Ihnen, einige letzte Logik von der Ausgabe der letzten Funktion bis zum erwarteten GraphQL-Feldtyp auszuführen. Die Ausgabe der letzten Funktion in der Funktionsliste ist im Response-Handler des Pipeline-Resolvers als oder verfügbar. ctx.prev.result
ctx.result
Ablauf der Ausführung
Bei einem Pipeline-Resolver, der aus zwei Funktionen besteht, stellt die folgende Liste den Ausführungsablauf dar, wenn der Resolver aufgerufen wird:
-
Anforderungshandler für Pipeline-Resolver
-
Funktion 1: Funktionsanforderungshandler
-
Funktion 1: Aufruf der Datenquelle
-
Funktion 1: Funktionsantwort-Handler
-
Funktion 2: Funktionsanforderungshandler
-
Funktion 2: Aufruf der Datenquelle
-
Funktion 2: Funktionsantwort-Handler
-
Antworthandler für den Pipeline-Resolver
Nützliche integrierte APPSYNC_JS
Runtime-Dienstprogramme
Die folgenden Dienstprogramme unterstützen die Arbeit mit Pipeline-Resolvern.
ctx.stash
Der Stash ist ein Objekt, das in jedem Resolver und jedem Funktionsanforderungs- und Antworthandler zur Verfügung gestellt wird. Dieselbe Stash-Instanz durchläuft einen einzigen Resolver-Lauf. Das bedeutet, dass Sie den Stash verwenden können, um beliebige Daten zwischen Anfrage- und Antworthandlern und zwischen Funktionen in einem Pipeline-Resolver zu übergeben. Sie können den Stash wie ein normales Objekt testen. JavaScript
ctx.prev.result
ctx.prev.result
ist das Ergebnis der vorherigen Operation, die in der Pipeline ausgeführt wurde. Wenn es sich bei der vorherigen Operation um den Anforderungshandler für den Pipeline-Resolver handelte, ctx.prev.result
wird er der ersten Funktion in der Kette zur Verfügung gestellt. Wenn die vorherige Operation die erste Funktion betraf, steht ctx.prev.result
für die Ausgabe der ersten Funktion und wird der zweiten Funktion in der Pipeline zur Verfügung gestellt. Wenn die vorherige Operation die letzte Funktion war, stellt sie die Ausgabe der letzten Funktion ctx.prev.result
dar und wird dem Response-Handler des Pipeline-Resolvers zur Verfügung gestellt.
util.error
Das Dienstprogramm util.error
ist nützlich, um ein Feldfehler auszulösen. Die Verwendung util.error
innerhalb eines Funktionsanforderungs- oder Antworthandlers löst sofort einen Feldfehler aus, der verhindert, dass nachfolgende Funktionen ausgeführt werden. Weitere Informationen und andere util.error
Signaturen finden Sie unter JavaScriptLaufzeitfunktionen für Resolver und Funktionen.
bis. appendError
util.appendError
ist ähnlich wieutil.error()
, mit dem großen Unterschied, dass es die Auswertung des Handlers nicht unterbricht. Stattdessen signalisiert es, dass ein Fehler mit dem Feld aufgetreten ist, ermöglicht aber die Auswertung des Handlers und damit die Rückgabe von Daten. Die Verwendung von util.appendError
in einer Funktion hat keine Auswirkungen auf die Ausführung des Pipeline-Ablaufs. Weitere Informationen und andere util.error
Signaturen finden Sie in den JavaScript Runtime-Features für Resolver und Funktionen.
Laufzeit. earlyReturn
Mit dieser runtime.earlyReturn
Funktion können Sie von jeder Anforderungsfunktion vorzeitig zurückkehren. Wenn Sie den Request-Handler runtime.earlyReturn
innerhalb eines Resolvers verwenden, wird er vom Resolver zurückgegeben. Wenn Sie ihn von einem AWS AppSync
Funktionsanforderungshandler aus aufrufen, kehren Sie von der Funktion zurück und setzen die Ausführung entweder mit der nächsten Funktion in der Pipeline oder dem Resolver-Response-Handler fort.
Pipeline-Resolver schreiben
Ein Pipeline-Resolver hat außerdem einen Request- und einen Response-Handler, der die Ausführung der Funktionen in der Pipeline umgibt: Sein Request-Handler wird vor der Anfrage der ersten Funktion ausgeführt, und sein Response-Handler wird nach der Antwort der letzten Funktion ausgeführt. Der Resolver-Anforderungshandler kann Daten so einrichten, dass sie von Funktionen in der Pipeline verwendet werden. Der Resolver-Response-Handler ist für die Rückgabe von Daten verantwortlich, die dem GraphQL-Feldausgabetyp zugeordnet sind. Im folgenden Beispiel definiert ein Resolver-Request-HandlerallowedGroups
; die zurückgegebenen Daten sollten zu einer dieser Gruppen gehören. Dieser Wert kann von den Funktionen des Resolvers verwendet werden, um Daten anzufordern. Der Response-Handler des Resolvers führt eine letzte Prüfung durch und filtert das Ergebnis, um sicherzustellen, dass nur Elemente zurückgegeben werden, die zu den zulässigen Gruppen gehören.
import { util } from '@aws-appsync/utils'; /** * Called before the request function of the first AppSync function in the pipeline. * @param ctx the context object holds contextual information about the function invocation. */ export function request(ctx) { ctx.stash.allowedGroups = ['admin']; ctx.stash.startedAt = util.time.nowISO8601(); return {}; } /** * Called after the response function of the last AppSync function in the pipeline. * @param ctx the context object holds contextual information about the function invocation. */ export function response(ctx) { const result = []; for (const item of ctx.prev.result) { if (ctx.stash.allowedGroups.indexOf(item.group) > -1) result.push(item); } return result; }
Funktionen schreiben AWS AppSync
AWS AppSync Funktionen ermöglichen es Ihnen, allgemeine Logik zu schreiben, die Sie für mehrere Resolver in Ihrem Schema wiederverwenden können. Sie können beispielsweise eine AWS AppSync Funktion aufrufen, die für QUERY_ITEMS
die Abfrage von Elementen aus einer Amazon DynamoDB DynamoDB-Datenquelle zuständig ist. Für Resolver, mit denen Sie Elemente abfragen möchten, fügen Sie die Funktion einfach zur Pipeline des Resolvers hinzu und geben Sie den zu verwendenden Abfrageindex an. Die Logik muss nicht erneut implementiert werden.
Zusätzliche Themen
Topics