Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Propiedades adicionales de GraphQL
GraphQL consta de varios principios de diseño para mantener la simplicidad y la solidez a escala.
Declarativo
GraphQL es declarativo, lo que significa que el usuario describirá (dará forma) a los datos declarando únicamente los campos que desee consultar. La respuesta solo devolverá los datos de estas propiedades. Por ejemplo, esta es una operación que recupera un Book
objeto de una tabla de DynamoDB con el valor 13 de ISBN id
9780199536061
:
{ getBook(id: "
9780199536061
") { name year author } }
La respuesta devolverá los campos de la carga (name
, year
y author
) y nada más:
{ "data": { "getBook": { "name": "Anna Karenina", "year": "1878", "author": "Leo Tolstoy", } } }
Gracias a este principio de diseño, GraphQL elimina los problemas perennes de sobreprocesamiento o subprocesamiento que se presentan en los sistemas REST APIs complejos. Esto se traduce en una recopilación de datos más eficiente y en un mejor rendimiento de la red.
Jerárquico
GraphQL es flexible en el sentido de que el usuario puede configurar los datos solicitados para adaptarlos a las necesidades de la aplicación. Los datos solicitados siempre siguen los tipos y la sintaxis de las propiedades definidas en tu GraphQLAPI. Por ejemplo, en el siguiente fragmento se muestra la getBook
operación con un nuevo campo denominado ámbito quotes
que devuelve todas las cadenas de comillas almacenadas y las páginas enlazadas a Book
9780199536061
:
{ getBook(id: "
9780199536061
") { name year author quotes { description page } } }
Al ejecutar esta consulta, se devuelve el resultado siguiente:
{ "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 } ] } } }
Como puede ver, los campos quotes
vinculados al libro solicitado se han devuelto como una matriz con el mismo formato descrito en nuestra consulta. Aunque no se ha mostrado aquí, GraphQL tiene la ventaja adicional de no ser exigente en cuanto a la ubicación de los datos que recupera. Los Books
y las quotes
podría almacenarse por separado, pero GraphQL seguirá recuperando la información mientras exista la asociación. Esto significa que su consulta puede recuperar múltiples datos independientes en una sola solicitud.
Introspectivo
GraphQL se documenta automáticamente o es declarativo. Admite varias operaciones integradas que permiten a los usuarios ver los tipos y campos subyacentes dentro del esquema. Por ejemplo, este es un tipo Foo
con un campo date
y description
:
type Foo { date: String description: String }
Podríamos usar la operación _type
para buscar los metadatos de escritura que se encuentran debajo del esquema:
{ __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 } } } }
Se devolverá una respuesta:
{ "__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 }, ] } }
Esta característica se puede utilizar para averiguar qué tipos y campos admite un esquema de GraphQL en particular. GraphQL admite una amplia variedad de estas operaciones introspectivas. Para obtener más información, consulte Introspección
Tipado fuerte
GraphQL admite el tipado fuerte a través de su sistema de tipos y campos. Cuando defina algo en su esquema, debe tener un tipo que pueda validarse antes de su tiempo de ejecución. También debe seguir la especificación de sintaxis de GraphQL. Este concepto no es diferente de la programación en otros lenguajes. Por ejemplo, este es el tipo Foo
de antes:
type Foo { date: String description: String }
Podemos ver que ese Foo
es el objeto que se va a crear. Dentro de una instancia de Foo
, habrá un campo date
y otro description
, ambos del tipo primitivo (escalar) String
. Sintácticamente, vemos que Foo
se ha declarado y que sus campos están dentro de su ámbito. Esta combinación de comprobación de tipos y sintaxis lógica garantiza que tu GraphQL API sea conciso y evidente por sí mismo. La especificación de tipos y sintaxis de GraphQL se encuentra aquí