View a markdown version of this page

Zusätzliche Eigenschaften von GraphQL - 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.

Zusätzliche Eigenschaften von GraphQL

GraphQL besteht aus mehreren Designprinzipien, um Einfachheit und Robustheit im großen Maßstab beizubehalten.

Deklarativ

GraphQL ist deklarativ, was bedeutet, dass der Benutzer die Daten beschreibt (formt), indem er nur die Felder deklariert, die er abfragen möchte. Die Antwort gibt nur die Daten für diese Eigenschaften zurück. Hier ist zum Beispiel ein Vorgang, der ein Book Objekt in einer DynamoDB-Tabelle mit dem ISBN 13-Wert von abruft: id 9780199536061

{ getBook(id: "9780199536061") { name year author } }

Die Antwort gibt die Felder in der Nutzlast (nameyear, und) zurück und author sonst nichts:

{ "data": { "getBook": { "name": "Anna Karenina", "year": "1878", "author": "Leo Tolstoy", } } }

Aufgrund dieses Designprinzips beseitigt GraphQL die ständigen Probleme des Über- und Unterabrufs, mit denen REST-APIs in komplexen Systemen zu tun haben. Dies führt zu einer effizienteren Datenerfassung und einer verbesserten Netzwerkleistung.

Hierarchical (Hierarchisch)

GraphQL ist insofern flexibel, als die angeforderten Daten vom Benutzer an die Anforderungen der Anwendung angepasst werden können. Die angeforderten Daten folgen immer den Typen und der Syntax der Eigenschaften, die in Ihrer GraphQL-API definiert sind. Der folgende Ausschnitt zeigt beispielsweise die getBook Operation mit einem neuen Feldbereich namens, der alle gespeicherten Anführungszeichen und Seiten zurückgibtquotes, die mit dem folgenden Link verknüpft sind: Book 9780199536061

{ getBook(id: "9780199536061") { name year author quotes { description page } } }

Die Ausführung dieser Abfrage gibt das folgende Ergebnis zurück:

{ "data": { "getBook": { "name": "Anna Karenina", "year": "1878", "author": "Leo Tolstoy", "quotes": [ { "description": "The highest Petersburg society is essentially one: in it everyone knows everyone else, everyone even visits everyone else.", "page": 135 }, { "description": "Happy families are all alike; every unhappy family is unhappy in its own way.", "page": 1 }, { "description": "To Konstantin, the peasant was simply the chief partner in their common labor.", "page": 251 } ] } } }

Wie Sie sehen können, wurden die mit dem angeforderten Buch verknüpften quotes Felder als Array in demselben Format zurückgegeben, das in unserer Abfrage beschrieben wurde. Obwohl es hier nicht gezeigt wurde, hat GraphQL den zusätzlichen Vorteil, dass es nicht genau weiß, wo sich die Daten befinden, die abgerufen werden. Booksund quotes könnte separat gespeichert werden, aber GraphQL ruft die Informationen trotzdem ab, solange die Verknüpfung besteht. Das bedeutet, dass Ihre Abfrage eine Vielzahl von eigenständigen Daten in einer einzigen Anfrage abrufen kann.

Introspektiv

GraphQL ist selbstdokumentierend oder introspektiv. Es unterstützt mehrere integrierte Operationen, die es Benutzern ermöglichen, die zugrunde liegenden Typen und Felder innerhalb des Schemas anzuzeigen. Hier ist zum Beispiel ein Foo Typ mit einem date description UND-Feld:

type Foo { date: String description: String }

Wir könnten die _type Operation verwenden, um die Typisierungsmetadaten unter dem Schema zu finden:

{ __type(name: "Foo") { name # returns the name of the type fields { # returns all fields in the type name # returns the name of each field type { # returns all types for each field name # returns the scalar type } } } }

Dies wird eine Antwort zurückgeben:

{ "__type": { "name": "Foo", # The type name "fields": [ { "name": "date", # The date field "type": { "name": "String" } # The date's type }, { "name": "description", # The description field "type": { "name": "String" } # The description's type }, ] } }

Diese Funktion kann verwendet werden, um herauszufinden, welche Typen und Felder ein bestimmtes GraphQL-Schema unterstützt. GraphQL unterstützt eine Vielzahl dieser introspektiven Operationen. Weitere Informationen finden Sie unter Introspection. https://graphql.org/learn/introspection/

Starkes Tippen

GraphQL unterstützt die starke Typisierung durch sein Typen- und Feldsystem. Wenn Sie etwas in Ihrem Schema definieren, muss es einen Typ haben, der vor der Laufzeit validiert werden kann. Es muss auch der Syntaxspezifikation von GraphQL entsprechen. Dieses Konzept unterscheidet sich nicht von der Programmierung in anderen Sprachen. Hier ist zum Beispiel der Foo Typ von vorhin:

type Foo { date: String description: String }

Wir können sehen, dass das das Objekt Foo ist, das erstellt wird. In einer Instanz von Foo wird es ein date description UND-Feld geben, beide vom String primitiven Typ (Skalar). Syntaktisch gesehen sehen wir, dass das Objekt deklariert Foo wurde und dass seine Felder innerhalb seines Gültigkeitsbereichs existieren. Diese Kombination aus Typprüfung und logischer Syntax stellt sicher, dass Ihre GraphQL-API übersichtlich und selbstverständlich ist. Die Typisierung und Syntaxspezifikation von GraphQL finden Sie hier. https://spec.graphql.org/