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 zu gewährleisten.
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 eine Operation, die 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 (name
year
, undauthor
) zurück und sonst nichts:
{ "data": { "getBook": { "name": "Anna Karenina", "year": "1878", "author": "Leo Tolstoy", } } }
Aufgrund dieses Entwurfsprinzips beseitigt GraphQL die ständigen Probleme des Über- und Unterabrufs, die in komplexen Systemen REST APIs auftreten. 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 Bedürfnisse der Anwendung angepasst werden können. Die angeforderten Daten folgen immer den Typen und der Syntax der in Ihrem GraphQL API definierten Eigenschaften. Das folgende Snippet zeigt beispielsweise den getBook
Vorgang mit einem neuen Feldbereich namensquotes
, der alle gespeicherten Anführungszeichenfolgen und Seiten zurückgibt, die mit dem Book
9780199536061
:
{ getBook(id: "
9780199536061
") { name year author quotes { description page } } }
Das Ausführen 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 im gleichen 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 abgerufenen Daten befinden. Books
und quotes
könnte separat gespeichert werden, aber GraphQL ruft die Informationen trotzdem ab, solange die Zuordnung 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, mit denen Benutzer die zugrunde liegenden Typen und Felder innerhalb des Schemas anzeigen können. 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 Introspektion.
Starkes Tippen
GraphQL unterstützt 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 früher:
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 deklariert Foo
wurde und dass seine Felder innerhalb seines Gültigkeitsbereichs existieren. Diese Kombination aus Typprüfung und logischer Syntax stellt sicher, dass Ihr GraphQL übersichtlich und selbstverständlich API ist. Die Typisierungs- und Syntaxspezifikation von GraphQL finden Sie hier.