Pipeline-Resolver (JavaScript) - AWS AppSync

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.

Pipeline-Resolver (JavaScript)

AWS AppSyncführt Resolver auf einem 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, sogenannte Funktionen, zusammenstellen 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.

Weitere Informationen zur Architektur einesJavaScriptPipeline-Resolver finden Sie imJavaScriptÜbersicht über Resolver.

Erstellen Sie einen Pipeline-Resolver

In derAWS AppSyncKonsole, gehe zumSchemaSeite.

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. In derMutationtippe auf der rechten Seite, wähleAnhängenneben demsignUpMutationsfeld. Stellen Sie den Resolver aufpipeline resolverund derAPPSYNC_JSLaufzeit, dann erstellen Sie den Resolver.

Unser Pipeline-Resolver meldet einen Benutzer an, indem er zuerst die eingegebene E-Mail-Adresse validiert und den Benutzer dann im System speichert. Wir werden die E-Mail-Validierung in einem kapselnE-Mail validierenFunktion und das Speichern des Benutzers in einemBenutzer speichernFunktion. Die validateEmail-Funktion wird zuerst ausgeführt, und, sofern die E-Mail gültig ist, anschließend die saveUser-Funktion.

Der Ausführungsablauf wird wie folgt aussehen:

  1. Anforderungshandler für Mutation.SignUp Resolver

  2. Funktion validateEmail

  3. Funktion saveUser

  4. Antworthandler für den Mutation.SignUp-Resolver

Weil wir das wahrscheinlich wiederverwenden werdenE-Mail validierenfunktioniert in anderen Resolvern auf unserer API, wir möchten den Zugriff vermeidenctx.argsweil diese sich von einem GraphQL-Feld zum anderen ändern werden. Wir können stattdessen ctx.stash verwenden, um das E-Mail-Attribut aus dem Eingabefeldargument signUp(input: Signup) zu speichern.

Aktualisieren Sie Ihren Resolver-Code, indem Sie Ihre Anfrage- und Antwortfunktionen ersetzen:

export function request(ctx) { ctx.stash.email = ctx.args.input.email return {}; } export function response(ctx) { return ctx.prev.result; }

WähleErstellenoderSpeichernum den Resolver zu aktualisieren.

Erstellen einer -Funktion

Auf der Pipeline-Resolver-Seite imFunktionenAbschnitt, klicken Sie aufFunktion hinzufügen, dannNeue Funktion erstellen. Es ist auch möglich, Funktionen zu erstellen, ohne die Resolver-Seite zu durchlaufen. Dazu müssen Sie in derAWS AppSyncKonsole, gehe zumFunktionenSeite. 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.

Stellen Sie sicher, dass Sie eine Datenquelle für erstellt habenKEINETyp. Wählen Sie diese Datenquelle in derName der DatenquelleListe. Für dieName der Funktion, geben Sie einvalidateEmail. In derFunktionscodeBereich, überschreibe alles mit diesem Snippet:

import { util } from '@aws-appsync/utils'; export function request(ctx) { const { email } = ctx.stash; const valid = util.matches( '^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(myvaliddomain)\.com', email ); if (!valid) { util.error(`"${email}" is not a valid email.`); } return { payload: { email } }; } export function response(ctx) { return ctx.result; }

Überprüfe deine Eingaben und wähleErstellen. Wir haben unsere validateEmail-Funktion erstellt. Wiederholen Sie diese Schritte, um das zu erstellenBenutzer speichernFunktion mit dem folgenden Code (Der Einfachheit halber verwenden wir aKEINEDatenquelle und tun Sie so, als ob der Benutzer nach der Ausführung der Funktion im System gespeichert wurde. ):

import { util } from '@aws-appsync/utils'; export function request(ctx) { return ctx.prev.result; } export function response(ctx) { ctx.result.id = util.autoId(); return ctx.result; }

Wir haben gerade unsere erstelltSaveUserFunktion.

Hinzufügen einer Funktion zu einem Pipeline-Resolver

Unsere Funktionen hätten automatisch zu dem Pipeline-Resolver hinzugefügt werden sollen, den wir gerade erstellt haben. Wenn dies nicht der Fall wäre oder Sie die Funktionen über das erstellt habenFunktionenSeite, auf die Sie klicken könnenFunktion hinzufügenzurück auf dersignUpResolver-Seite, um sie anzuhängen. Fügen Sie beide hinzuE-Mail validierenundBenutzer speichernFunktionen für den Resolver. Die Funktion validateEmail muss vor der Funktion saveUser platziert werden. Wenn Sie weitere Funktionen hinzufügen, können Sie dienach oben gehenundnach unten bewegenOptionen, um die Reihenfolge der Ausführung Ihrer Funktionen neu zu organisieren. Überprüfe deine Änderungen und wähle dannSpeichern.

Eine Abfrage ausführen

In derAWS AppSyncKonsole, gehe zumAbfragenSeite. Stellen Sie im Explorer sicher, dass Sie Ihre Mutation verwenden. Wenn nicht, wähleMutationin der Drop-down-Liste wählen Sie dann+. Geben Sie die folgende Abfrage ein:

mutation { signUp(input: {email: "nadia@myvaliddomain.com", username: "nadia"}) { id username } }

Dies sollte etwa Folgendes zurückgeben:

{ "data": { "signUp": { "id": "256b6cc2-4694-46f4-a55e-8cb14cc5d7fc", "username": "nadia" } } }

Wir haben mit einem Pipeline-Resolver unseren Benutzer erfolgreich angemeldet und die eingegebene E-Mail validiert.