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.
Konfiguration und Verwendung von Pipeline-Resolvern in AWS AppSync (VTL)
Anmerkung
Wir unterstützen jetzt hauptsächlich die APPSYNC_JS-Laufzeit und ihre Dokumentation. Bitte erwägen Sie, die APPSYNC_JS-Laufzeit und ihre Anleitungen hier zu verwenden. https://docs.aws.amazon.com/appsync/latest/devguide/configuring-resolvers-js.html
AWS AppSync führt Resolver für ein GraphQL-Feld aus. In einigen Fällen müssen Anwendungen mehrere Operationen ausführen, um ein einziges GraphQL-Feld aufzulösen. Mit Pipeline-Resolvern können Entwickler jetzt Operationen erstellen, die als Funktionen bezeichnet werden, und sie nacheinander ausführen. Pipeline-Resolver sind nützlich für Anwendungen, die z. B. eine Autorisierungsprüfung ausführen müssen, bevor sie Daten für ein Feld abrufen.
Ein Pipeline-Resolver besteht aus einer Zuweisungsvorlage für Vorher, einer Zuweisungsvorlage für Nachher und einer Liste von Funktionen. Jede Funktion hat eine Vorlage für die Zuordnung von Anforderungen und Antworten, die sie für eine Datenquelle ausführt. Da ein Pipeline-Resolver die Ausführung an eine Liste von Funktionen delegiert, ist er mit keiner Datenquelle verknüpft. Unit-Resolver und Funktionen sind Primitive, die Operationen gegen Datenquellen ausführen. Weitere Informationen finden Sie in der Übersicht über die Resolver-Mapping-Vorlage.
Schritt 1: Einen Pipeline-Resolver erstellen
Rufen Sie in der AWS AppSync Konsole die Schema-Seite auf.
Speichern Sie das folgende Schema:
schema { query: Query mutation: Mutation } type Mutation { signUp(input: Signup): User } type Query { getUser(id: ID!): User } input Signup { username: String! email: String! } type User { id: ID! username: String email: AWSEmail }
Wir werden einen Pipeline-Resolver an das signUp-Feld mit dem Typ der Mutation anhängen. Wählen Sie im Mutationstyp auf der rechten Seite neben dem signUp Mutationsfeld die Option Anhängen aus. Klicken Sie auf der Seite „Resolver erstellen“ auf Aktionen und dann auf Laufzeit aktualisieren. Wählen Sie Pipeline ResolverVTL, wählen Sie und wählen Sie dann Aktualisieren. Die Seite sollte jetzt drei Abschnitte enthalten: einen Textbereich Vor dem Mappen der Vorlage, einen Abschnitt Funktionen und einen Textbereich Nach dem Mappen der Vorlage.
Unser Pipeline-Resolver meldet einen Benutzer an, indem er zuerst die eingegebene E-Mail-Adresse validiert und den Benutzer dann im System speichert. Wir kapseln die E-Mail-Validierung in einer validateEmail-Funktion und das Speichern des Benutzers in einer saveUser-Funktion. Die validateEmail-Funktion wird zuerst ausgeführt, und, sofern die E-Mail gültig ist, anschließend die saveUser-Funktion.
Der Ausführungsablauf sieht wie folgt aus:
-
Mutation.signUp Vorlage für die Zuordnung von Resolveranfragen
-
Funktion validateEmail
-
Funktion saveUser
-
Mutation.signUp Vorlage für die Zuordnung von Resolver-Antworten
Da wir die Funktion ValidateEmail wahrscheinlich in anderen Resolvern unserer API wiederverwenden werden, möchten wir den Zugriff darauf vermeiden, $ctx.args da sich diese von einem GraphQL-Feld in ein anderes ändern. Wir können stattdessen $ctx.stash verwenden, um das E-Mail-Attribut aus dem Eingabefeldargument signUp(input: Signup) zu speichern.
VOR DEM Mappen DER VORLAGE:
## store email input field into a generic email key $util.qr($ctx.stash.put("email", $ctx.args.input.email)) {}
Die Konsole bietet eine Standard-Passthrough-Vorlage für die AFTER-Zuordnung, die wir verwenden werden:
$util.toJson($ctx.result)
Wählen Sie Erstellen oder Speichern, um den Resolver zu aktualisieren.
Schritt 2: Eine Funktion erstellen
Klicken Sie auf der Pipeline-Resolver-Seite im Abschnitt Funktionen auf Funktion hinzufügen und dann auf Neue Funktion erstellen. Es ist auch möglich, Funktionen zu erstellen, ohne die Resolver-Seite aufrufen zu müssen. Rufen Sie dazu in der AWS AppSync Konsole die Seite Funktionen auf. Wählen Sie die Schaltfläche Create function (Funktion erstellen). Wir erstellen eine Funktion, die prüft, ob eine E-Mail gültig ist und von einer bestimmten Domäne stammt. Sofern die E-Mail nicht gültig ist, löst die Funktion einen Fehler aus. Andernfalls leitet sie sämtliche Eingaben weiter.
Wählen Sie auf der neuen Funktionsseite Aktionen und dann Laufzeit aktualisieren. Wählen Sie VTL und dann Aktualisieren. Stellen Sie sicher, dass Sie eine Datenquelle vom Typ NONE erstellt haben. Wählen Sie diese Datenquelle in der Liste mit dem Datenquellennamen aus. Geben Sie für den Funktionsnamen Folgendes einvalidateEmail. Überschreiben Sie im Funktionscode-Bereich alles mit diesem Snippet:
#set($valid = $util.matches("^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(myvaliddomain)\.com", $ctx.stash.email)) #if (!$valid) $util.error("$ctx.stash.email is not a valid email.") #end { "payload": { "email": $util.toJson(${ctx.stash.email}) } }
Fügen Sie dies in die Vorlage für die Antwortzuordnung ein:
$util.toJson($ctx.result)
Überprüfen Sie Ihre Änderungen und wählen Sie dann Erstellen aus. Wir haben unsere validateEmail-Funktion erstellt. Wiederholen Sie diese Schritte, um die SaveUser-Funktion mit den folgenden Vorlagen für die Anfrage- und Antwortzuordnung zu erstellen (Der Einfachheit halber verwenden wir eine NONE-Datenquelle und tun so, als ob der Benutzer nach der Ausführung der Funktion im System gespeichert wurde. ):
Zuweisungsvorlage für Anforderungen:
## $ctx.prev.result contains the signup input values. We could have also ## used $ctx.args.input. { "payload": $util.toJson($ctx.prev.result) }
Zuweisungsvorlage für Antworten:
## an id is required so let's add a unique random identifier to the output $util.qr($ctx.result.put("id", $util.autoId())) $util.toJson($ctx.result)
Wir haben gerade unsere SaveUser-Funktion erstellt.
Schritt 3: Hinzufügen einer Funktion zu einem Pipeline-Resolver
Unsere Funktionen hätten automatisch zu dem gerade erstellten Pipeline-Resolver hinzugefügt werden müssen. Wenn dies nicht der Fall war oder Sie die Funktionen über die Funktionsseite erstellt haben, können Sie auf der Resolver-Seite auf Funktion hinzufügen klicken, um sie anzuhängen. Fügen Sie dem Resolver sowohl die Funktionen ValidateEmail als auch SaveUser hinzu. Die Funktion validateEmail muss vor der Funktion saveUser platziert werden. Wenn Sie weitere Funktionen hinzufügen, können Sie die Optionen Nach oben und Nach unten verwenden, um die Ausführungsreihenfolge Ihrer Funktionen neu zu organisieren. Überprüfen Sie Ihre Änderungen und wählen Sie dann Speichern.
Schritt 4: Eine Abfrage ausführen
Gehen Sie in der AWS AppSync Konsole zur Seite Abfragen. Stellen Sie im Explorer sicher, dass Sie Ihre Mutation verwenden. Wenn nicht, wählen Sie Mutation in der Dropdownliste aus und wählen Sie dann+. Geben Sie die folgende Abfrage ein:
mutation { signUp(input: { email: "nadia@myvaliddomain.com" username: "nadia" }) { id email } }
Das sollte etwas zurückgeben wie:
{ "data": { "signUp": { "id": "256b6cc2-4694-46f4-a55e-8cb14cc5d7fc", "email": "nadia@myvaliddomain.com" } } }
Wir haben mit einem Pipeline-Resolver unseren Benutzer erfolgreich angemeldet und die eingegebene E-Mail validiert. Ein detailliertes Tutorial zu Pipeline-Resolvern finden Sie unter Tutorial: Pipeline-Resolver