Propiedades adicionales de GraphQL - AWS AppSync GraphQL

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 objeto Book de una tabla de DynamoDB con el valor de id ISBN 13 de 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 continuos problemas de obtención excesiva e insuficiente de datos a las que se enfrentan las API de REST en los sistemas 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 la API de GraphQL. Por ejemplo, en el siguiente fragmento de código se muestra la operación de getBook con un nuevo ámbito de campo denominado quotes que devuelve todas las cadenas de citas almacenadas y las páginas enlazadas al 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 la API de GraphQL sea concisa y evidente por sí misma. La especificación de tipos y sintaxis de GraphQL se encuentra aquí.