Proprietà aggiuntive di GraphQL - AWS AppSync GraphQL

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Proprietà aggiuntive di GraphQL

GraphQL è costituito da diversi principi di progettazione per mantenere la semplicità e la robustezza su larga scala.

Dichiarativo

GraphQL è dichiarativo, il che significa che l'utente descriverà (modellerà) i dati dichiarando solo i campi su cui desidera interrogare. La risposta restituirà solo i dati per queste proprietà. Ad esempio, ecco un'operazione che recupera un Book oggetto in una tabella DynamoDB con il valore 13 di ISBN id 9780199536061:

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

La risposta restituirà i campi del payload (nameyear, eauthor) e nient'altro:

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

Grazie a questo principio di progettazione, GraphQL elimina i problemi perenni di sovra-fetching e insufficiente tipici dei sistemi complessi. REST APIs Ciò si traduce in una raccolta dati più efficiente e in prestazioni di rete migliorate.

Gerarchico

GraphQL è flessibile in quanto i dati richiesti possono essere modellati dall'utente per soddisfare le esigenze dell'applicazione. I dati richiesti seguono sempre i tipi e la sintassi delle proprietà definite in GraphQLAPI. Ad esempio, il seguente frammento mostra l'getBookoperazione con un nuovo campo denominato scope quotes che restituisce tutte le stringhe di virgolette e le pagine memorizzate collegate a Book 9780199536061:

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

L'esecuzione di questa query restituisce il seguente risultato:

{ "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 } ] } } }

Come puoi vedere, i quotes campi collegati al libro richiesto sono stati restituiti come matrice nello stesso formato descritto dalla nostra query. Sebbene non sia stato mostrato qui, GraphQL ha l'ulteriore vantaggio di non essere esigente riguardo alla posizione dei dati che sta recuperando. Bookse quotes potrebbero essere archiviati separatamente, ma GraphQL recupererà comunque le informazioni finché esiste l'associazione. Ciò significa che la tua query può recuperare moltitudini di dati autonomi in un'unica richiesta.

Introspettiva

GraphQL è autodocumentante o introspettivo. Supporta diverse operazioni integrate che consentono agli utenti di visualizzare i tipi e i campi sottostanti all'interno dello schema. Ad esempio, ecco un Foo tipo con un description campo date and:

type Foo { date: String description: String }

Potremmo usare l'_typeoperazione per trovare i metadati di digitazione sotto lo schema:

{ __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 } } } }

Ciò restituirà una risposta:

{ "__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 }, ] } }

Questa funzionalità può essere utilizzata per scoprire quali tipi e campi sono supportati da un particolare schema GraphQL. GraphQL supporta un'ampia varietà di queste operazioni introspettive. Per ulteriori informazioni, consulta Introspection.

Digitazione forte

GraphQL supporta la digitazione avanzata tramite il suo sistema di tipi e campi. Quando definisci qualcosa nel tuo schema, deve avere un tipo che possa essere convalidato prima del runtime. Deve inoltre seguire le specifiche di sintassi di GraphQL. Questo concetto non è diverso dalla programmazione in altri linguaggi. Ad esempio, ecco il Foo tipo precedente:

type Foo { date: String description: String }

Possiamo vedere che Foo è l'oggetto che verrà creato. All'interno di un'istanza diFoo, ci sarà un description campo date and, entrambi di tipo String primitivo (scalare). Sintatticamente, vediamo che Foo è stato dichiarato e i suoi campi esistono all'interno del suo ambito. Questa combinazione di controllo dei tipi e sintassi logica assicura che API GraphQL sia conciso e chiaro. Le specifiche di digitazione e sintassi di GraphQL sono disponibili qui.