Einfache Abfragen erstellen (VTL) - 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.

Einfache Abfragen erstellen (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.

GraphQL-Resolver verbinden die Felder in einem Schema mit einer Datenquelle. Resolver sind der Mechanismus, mit dem Anfragen erfüllt werden. AWS AppSync kann Resolver automatisch aus einem Schema erstellen und verbinden oder ein Schema erstellen und Resolver aus einer vorhandenen Tabelle verbinden, ohne dass Sie Code schreiben müssen.

Resolver, die AWS AppSync verwendet werden JavaScript , um einen GraphQL-Ausdruck in ein Format zu konvertieren, das die Datenquelle verwenden kann. Alternativ können Mapping-Vorlagen in Apache Velocity Template Language (VTL) geschrieben werden, um einen GraphQL-Ausdruck in ein Format zu konvertieren, das die Datenquelle verwenden kann.

In diesem Abschnitt erfahren Sie, wie Sie Resolver mithilfe von konfigurieren. VTL Eine einführende Programmieranleitung im Stil eines Tutorials zum Schreiben von Resolvern finden Sie im Resolver Mapping Template Programming Guide. Hilfsprogramme, die Sie beim Programmieren verwenden können, finden Sie in der Kontextreferenz für Resolver-Mapping-Vorlagen. AWS AppSync verfügt außerdem über integrierte Test- und Debug-Workflows, die Sie verwenden können, wenn Sie von Grund auf neu bearbeiten oder Inhalte erstellen. Weitere Informationen finden Sie unter Resolver testen und debuggen.

Wir empfehlen, diese Anleitung zu befolgen, bevor Sie versuchen, eines der oben genannten Tutorials zu verwenden.

In diesem Abschnitt erfahren Sie, wie Sie einen Resolver erstellen, einen Resolver für Mutationen hinzufügen und erweiterte Konfigurationen verwenden.

Erstellen Sie Ihren ersten Resolver

In Anlehnung an die Beispiele aus den vorherigen Abschnitten besteht der erste Schritt darin, einen Resolver für Ihren Query Typ zu erstellen.

Console
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die AppSync Konsole.

    1. Wählen Sie im APIsDashboard Ihr GraphQL API aus.

    2. Wählen Sie in der Seitenleiste Schema aus.

  2. Auf der rechten Seite der Seite befindet sich ein Fenster namens Resolvers. Dieses Feld enthält eine Liste der Typen und Felder, wie sie in Ihrem Schemafenster auf der linken Seite der Seite definiert sind. Sie können Resolver an Felder anhängen. Wählen Sie beispielsweise unter dem Abfragetyp neben dem getTodos Feld die Option Anhängen aus.

  3. Wählen Sie auf der Seite „Resolver erstellen“ die Datenquelle aus, die Sie im Handbuch Datenquellen anhängen erstellt haben. Im Fenster Zuordnungsvorlagen konfigurieren können Sie mithilfe der Dropdownliste auf der rechten Seite sowohl die generischen Vorlagen für die Anfrage als auch die Vorlage für die Antwortzuordnung auswählen oder Ihre eigenen erstellen.

    Anmerkung

    Die Kopplung einer Vorlage für die Zuordnung von Anfragen mit einer Vorlage für die Zuordnung von Antworten wird als Unit-Resolver bezeichnet. Unit-Resolver sind in der Regel für Routineoperationen vorgesehen. Wir empfehlen, sie nur für einzelne Operationen mit einer kleinen Anzahl von Datenquellen zu verwenden. Für komplexere Operationen empfehlen wir die Verwendung von Pipeline-Resolvern, die mehrere Operationen mit mehreren Datenquellen nacheinander ausführen können.

    Weitere Informationen zum Unterschied zwischen Vorlagen für die Zuordnung von Anfragen und Antworten finden Sie unter Unit-Resolver.

    Weitere Informationen zur Verwendung von Pipeline-Resolvern finden Sie unter Pipeline-Resolver.

  4. Für allgemeine Anwendungsfälle verfügt die AWS AppSync Konsole über integrierte Vorlagen, mit denen Sie Elemente aus Datenquellen abrufen können (z. B. Abfragen aller Elemente, einzelne Suchvorgänge usw.). In der einfachen Version des Schemas aus Designing your schema, in der getTodos es keine Paginierung gab, sieht die Vorlage für die Anforderungszuweisung zum Auflisten von Elementen beispielsweise wie folgt aus:

    { "version" : "2017-02-28", "operation" : "Scan" }
  5. Sie benötigen immer eine Vorlage für die Antwortzuweisung, die der Anfrage beiliegt. Die Konsole stellt eine Standardvorlage mit dem folgenden Pass-Through-Wert für Listen bereit:

    $util.toJson($ctx.result.items)

    In diesem Beispiel hat das context-Objekt (mit dem Alias $ctx) für Listen mit Elementen die Form $context.result.items. Wenn Ihre GraphQL-Operation ein einzelnes Element zurückgibt, wäre $context.result dies der Fall. AWS AppSync bietet Hilfsfunktionen für allgemeine Operationen, wie die zuvor aufgeführte $util.toJson Funktion, um Antworten richtig zu formatieren. Eine vollständige Liste der Funktionen finden Sie unter Referenz zum Resolver Mapping Template Utility.

  6. Wählen Sie „Resolver speichern“.

API
  1. Erstellen Sie ein Resolver-Objekt, indem Sie den aufrufen. CreateResolverAPI

  2. Sie können die Felder Ihres Resolvers ändern, indem Sie den aufrufen. UpdateResolverAPI

CLI
  1. Erstellen Sie einen Resolver, indem Sie den create-resolverBefehl ausführen.

    Für diesen speziellen Befehl müssen Sie 6 Parameter eingeben:

    1. Der api-id von dirAPI.

    2. Der type-name Typ, den Sie in Ihrem Schema ändern möchten. Im Konsolenbeispiel war dasQuery.

    3. Das field-name Feld, das Sie in Ihrem Typ ändern möchten. Im Konsolenbeispiel war dasgetTodos.

    4. Die data-source-name der Datenquelle, die Sie im Handbuch Datenquellen anhängen erstellt haben.

    5. Derrequest-mapping-template, welcher der Hauptteil der Anfrage ist. Im Konsolenbeispiel lautete das:

      { "version" : "2017-02-28", "operation" : "Scan" }
    6. Dasresponse-mapping-template, was der Hauptteil der Antwort ist. Im Konsolenbeispiel lautete das:

      $util.toJson($ctx.result.items)

    Ein Beispielbefehl könnte so aussehen:

    aws appsync create-resolver --api-id abcdefghijklmnopqrstuvwxyz --type-name Query --field-name getTodos --data-source-name TodoTable --request-mapping-template "{ "version" : "2017-02-28", "operation" : "Scan", }" --response-mapping-template ""$"util.toJson("$"ctx.result.items)"

    Eine Ausgabe wird in der zurückgegebenCLI. Ein Beispiel:

    { "resolver": { "kind": "UNIT", "dataSourceName": "TodoTable", "requestMappingTemplate": "{ version : 2017-02-28, operation : Scan, }", "resolverArn": "arn:aws:appsync:us-west-2:107289374856:apis/abcdefghijklmnopqrstuvwxyz/types/Query/resolvers/getTodos", "typeName": "Query", "fieldName": "getTodos", "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }
  2. Um die Felder und/oder Mapping-Vorlagen eines Resolvers zu ändern, führen Sie den update-resolverBefehl aus.

    Mit Ausnahme des api-id Parameters werden die im create-resolver Befehl verwendeten Parameter durch die neuen Werte aus dem update-resolver Befehl überschrieben.

Einen Resolver für Mutationen hinzufügen

Der nächste Schritt besteht darin, einen Resolver für Ihren Mutation Typ zu erstellen.

Console
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die AppSync Konsole.

    1. Wählen Sie im APIsDashboard Ihr GraphQL API aus.

    2. Wählen Sie in der Seitenleiste Schema aus.

  2. Wählen Sie unter dem Mutationstyp neben dem addTodo Feld die Option Anhängen aus.

  3. Wählen Sie auf der Seite „Resolver erstellen“ die Datenquelle aus, die Sie im Handbuch Datenquellen anhängen erstellt haben.

  4. Im Fenster Zuordnungsvorlagen konfigurieren müssen Sie die Anforderungsvorlage ändern, da es sich um eine Mutation handelt, bei der Sie DynamoDB ein neues Element hinzufügen. Verwenden Sie die folgende Abfrage-Zuweisungsvorlage:

    { "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id) }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }
  5. AWS AppSync konvertiert automatisch die im addTodo Feld definierten Argumente aus Ihrem GraphQL-Schema in DynamoDB-Operationen. Im vorherigen Beispiel werden Datensätze in DynamoDB mit dem Schlüssel von gespeichertid, der vom Mutationsargument as übergeben wird. $ctx.args.id Alle anderen Felder, die Sie durchlaufen, werden automatisch DynamoDB-Attributen mit zugeordnet. $util.dynamodb.toMapValuesJson($ctx.args)

    Verwenden Sie für diesen Resolver die folgende Antwortzuweisungsvorlage:

    $util.toJson($ctx.result)

    AWS AppSync unterstützt auch Test- und Debug-Workflows für die Bearbeitung von Resolvern. Sie können ein context-Mock-Objekt verwenden, um den transformierten Wert der Vorlage vor dem Aufrufen anzuzeigen. Optional können Sie die vollständige Anforderungsausführung für eine Datenquelle interaktiv anzeigen, während Sie eine Abfrage ausführen. Weitere Informationen finden Sie unter Resolver testen und debuggen und Überwachen und Protokollieren.

  6. Wählen Sie „Resolver speichern“.

API

Sie können dies auch tun, APIs indem Sie die Befehle im Abschnitt Erstellen Sie Ihren ersten Resolver und die Parameterdetails aus diesem Abschnitt verwenden.

CLI

Sie können dies auch in der tun, CLI indem Sie die Befehle im Abschnitt Erstellen Sie Ihren ersten Resolver und die Parameterdetails aus diesem Abschnitt verwenden.

Wenn Sie die erweiterten Resolver nicht verwenden, können Sie zu diesem Zeitpunkt mit der Verwendung von GraphQL beginnen, API wie unter Verwenden von beschrieben. API

Fortgeschrittene Resolver

Wenn Sie dem Abschnitt „Erweitert“ folgen und unter Entwerfen Ihres Schemas für einen paginierten Scan ein Beispielschema erstellen, verwenden Sie stattdessen die folgende Anforderungsvorlage für das getTodos Feld:

{ "version" : "2017-02-28", "operation" : "Scan", "limit": $util.defaultIfNull(${ctx.args.limit}, 20), "nextToken": $util.toJson($util.defaultIfNullOrBlank($ctx.args.nextToken, null)) }

In diesem Paginierungsanwendungsfall ist die Antwortzuweisung mehr als nur ein Pass-Through, da sie sowohl den Cursor (damit der Kunde weiß, mit welcher Seite das nächste Mal begonnen wird) als auch den Ergebnissatz enthält. Die Zuweisungsvorlage sieht folgendermaßen aus:

{ "todos": $util.toJson($context.result.items), "nextToken": $util.toJson($context.result.nextToken) }

Die Felder in der vorherigen Antwortzuweisungsvorlage sollten mit den in Ihrem TodoConnection-Typ definierten Feldern übereinstimmen.

Für Beziehungen, bei denen Sie eine Comments Tabelle haben und das Kommentarfeld für den Typ auflösen (was den Todo Typ von zurückgibt[Comment]), können Sie eine Zuordnungsvorlage verwenden, die eine Abfrage für die zweite Tabelle ausführt. Dazu müssen Sie bereits eine Datenquelle für die Comments Tabelle erstellt haben, wie unter Hinzufügen einer Datenquelle beschrieben.

Anmerkung

Wir verwenden einen Abfragevorgang für eine zweite Tabelle nur zur Veranschaulichung. Sie könnten stattdessen eine andere Operation gegen DynamoDB verwenden. Darüber hinaus könnten Sie die Daten aus einer anderen Datenquelle abrufen, z. B. AWS Lambda aus Amazon OpenSearch Service, da die Beziehung durch Ihr GraphQL-Schema gesteuert wird.

Console
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die AppSync Konsole.

    1. Wählen Sie im APIsDashboard Ihr GraphQL API aus.

    2. Wählen Sie in der Seitenleiste Schema aus.

  2. Wählen Sie unter dem Typ Todo neben dem Feld die comments Option Anhängen aus.

  3. Wählen Sie auf der Seite „Resolver erstellen“ die Datenquelle für die Tabelle „Kommentare“ aus. Der Standardname für die Tabelle Kommentare aus den Schnellstartanleitungen lautetAppSyncCommentTable, er kann jedoch variieren, je nachdem, welchen Namen Sie der Tabelle gegeben haben.

  4. Fügen Sie Ihrer Vorlage für die Anforderungszuweisung den folgenden Ausschnitt hinzu:

    { "version": "2017-02-28", "operation": "Query", "index": "todoid-index", "query": { "expression": "todoid = :todoid", "expressionValues": { ":todoid": { "S": $util.toJson($context.source.id) } } } }
  5. context.source verweist auf das übergeordnete Objekt des aktuellen Felds, das aufgelöst wird. In diesem Beispiel verweist source.id auf das Todo-Objekt, das dann für den Abfrageausdruck verwendet wird.

    Sie können die Pass-Through-Antwortzuweisungsvorlage folgendermaßen verwenden:

    $util.toJson($ctx.result.items)
  6. Wählen Sie „Resolver speichern“.

  7. Gehen Sie abschließend zurück zur Schemaseite in der Konsole, fügen Sie dem addComment Feld einen Resolver hinzu und geben Sie die Datenquelle für die Comments Tabelle an. Die Anforderungszuweisungsvorlage ist in diesem Fall eine einfache PutItem-Anweisung mit der spezifischen todoid, die als Argument kommentiert ist, aber Sie verwenden das Dienstprogramm $utils.autoId() zum Erstellen eines eindeutigen Sortierschlüssels für den Kommentar:

    { "version": "2017-02-28", "operation": "PutItem", "key": { "todoid": { "S": $util.toJson($context.arguments.todoid) }, "commentid": { "S": "$util.autoId()" } }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }

    Verwenden Sie folgendermaßen eine Pass-Through-Antwortvorlage:

    $util.toJson($ctx.result)
API

Sie können dies auch tun, APIs indem Sie die Befehle im Abschnitt Erstellen Sie Ihren ersten Resolver und die Parameterdetails in diesem Abschnitt verwenden.

CLI

Sie können dies auch in der tun, CLI indem Sie die Befehle im Abschnitt Erstellen Sie Ihren ersten Resolver und die Parameterdetails aus diesem Abschnitt verwenden.