View a markdown version of this page

AWS AppSync JavaScript Resolver im Überblick - AWS AppSync GraphQL

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 Resolver im Überblick

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 Konnektoren 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 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, Hilfsprogrammen und Funktionen. Eine vollständige Liste der von der APPSYNC_JS Runtime unterstützten Features und Funktionen finden Sie unter 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 Anforderungsnutzlast zurück, die zum Aufrufen Ihrer Datenquelle verwendet wurde. Der Antworthandler erhält eine Nutzlast von der Datenquelle 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 Anforderungs- und Antworthandler sowie eine Liste von Funktionen definiert. Jede Funktion hat einen Anforderungs - und Antworthandler, die sie für eine Datenquelle ausführt. Da ein Pipeline-Resolver die Ausführung einer Liste von Funktionen ausführt, 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 Request-Handler eines Pipeline-Resolvers (der vorherige Schritt) ermöglicht es Ihnen, eine gewisse Vorbereitungslogik auszuführen, bevor Sie die definierten Funktionen ausführen.

Funktionsliste

Die Liste der Funktionen eines Pipeline-Resolvers wird nacheinander ausgeführt. Das Ergebnis der Auswertung 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 Pipeline-Resolver

Mit dem Response-Handler eines Pipeline-Resolvers können Sie die endgültige Logik von der Ausgabe der letzten Funktion bis zum erwarteten GraphQL-Feldtyp ausfü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:

  1. Anforderungshandler für Pipeline-Resolver

  2. Funktion 1: Handler für Funktionsanfragen

  3. Funktion 1: Aufruf der Datenquelle

  4. Funktion 1: Antwort-Handler für die Funktion

  5. Funktion 2: Handler für Funktionsanfragen

  6. Funktion 2: Aufruf der Datenquelle

  7. Funktion 2: Antwort-Handler für die Funktion

  8. Antworthandler für Pipeline-Resolver

Nützliche, in die APPSYNC_JS-Laufzeit integrierte Hilfsprogramme

Die folgenden Dienstprogramme unterstützen die Arbeit mit Pipeline-Resolvern.

ctx.stash

Der Stash ist ein Objekt, das in jedem Resolver und in jedem Funktionsanforderungs- und Antworthandler verfügbar gemacht wird. Dieselbe Stash-Instanz durchläuft einen einzigen Resolver-Lauf. Das bedeutet, dass Sie den Stash verwenden können, um beliebige Daten über Anfrage- und Antworthandler sowie über Funktionen in einem Pipeline-Resolver hinweg 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 die vorherige Operation der Pipeline-Resolver-Request-Handler war, 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, ctx.prev.result stellt sie die Ausgabe der letzten Funktion dar und wird dem Pipeline-Resolver-Antworthandler zur Verfügung gestellt.

util.error

Das Dienstprogramm util.error ist nützlich, um ein Feldfehler auszulösen. Die Verwendung util.error innerhalb einer Funktionsanforderung oder eines 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 JavaScript Laufzeitfunktionen für Resolver und Funktionen.

Util.AppendError

util.appendErrorist ä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 folglich 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 Laufzeitfunktionen für Resolver und Funktionen.

Runtime.EarlyReturn

Die runtime.earlyReturn Funktion ermöglicht es Ihnen, vorzeitig von einer beliebigen Anforderungsfunktion zurückzukehren. Wenn Sie einen Request-Handler runtime.earlyReturn innerhalb eines Resolvers verwenden, kehren Sie vom Resolver zurück. Wenn Sie es von einem AWS AppSync Funktionsanforderungshandler aus aufrufen, kehren Sie von der Funktion zurück und setzen den Lauf entweder zur nächsten Funktion in der Pipeline oder zum Resolver-Response-Handler fort.

Pipeline-Resolver schreiben

Ein Pipeline-Resolver hat auch einen Request- und einen Response-Handler, die die Ausführung der Funktionen in der Pipeline umgeben: Sein Request-Handler wird vor der Anforderung der ersten Funktion ausgeführt, und sein Response-Handler wird nach der Antwort der letzten Funktion ausgeführt. Der Resolver-Request-Handler 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 Überprü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; }

Writing AWS AppSync Funktionen

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-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