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 semplicità e 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 ISBN 13 di: id 9780199536061
{ getBook(id: "9780199536061") { name year author } }
La risposta restituirà i campi del payload (name,year, e) e author nient'altro:
{ "data": { "getBook": { "name": "Anna Karenina", "year": "1878", "author": "Leo Tolstoy", } } }
Grazie a questo principio di progettazione, GraphQL elimina i perenni problemi di recupero eccessivo e insufficiente che le API REST risolvono nei sistemi complessi. Ciò si traduce in una raccolta dei dati più efficiente e in un miglioramento delle prestazioni di rete.
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 nell'API GraphQL. Ad esempio, il frammento seguente mostra l'getBookoperazione con un nuovo ambito di campo chiamato quotes che restituisce tutte le stringhe di virgolette memorizzate e le pagine 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 array nello stesso formato descritto dalla nostra query. Sebbene non sia stato mostrato qui, GraphQL ha l'ulteriore vantaggio di non essere specifico sulla posizione dei dati che sta recuperando. Bookse quotes potrebbe essere archiviato separatamente, ma GraphQL recupererà comunque le informazioni finché esiste l'associazione. Ciò significa che la tua query può recuperare una moltitudine di dati autonomi in un'unica richiesta.
Introspettivo
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 supporta un particolare schema GraphQL. GraphQL supporta un'ampia varietà di queste operazioni introspettive. Per ulteriori informazioni, vedere Introspection. https://graphql.org/learn/introspection/
Digitazione avanzata
GraphQL supporta una digitazione avanzata attraverso il suo sistema di tipi e campi. Quando definisci qualcosa nel tuo schema, deve avere un tipo che può essere convalidato prima dell'esecuzione. Deve inoltre seguire le specifiche della 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 che i suoi campi sono inclusi nel suo ambito. Questa combinazione di controllo dei tipi e sintassi logica garantisce che l'API GraphQL sia concisa ed evidente. Le specifiche di digitazione e sintassi di GraphQL sono disponibili qui. https://spec.graphql.org/