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.
Esquemas de GraphQL
El esquema GraphQL es la base de una API de GraphQL. Sirve como esquema que define la forma de los datos. También es un contrato entre el cliente y el servidor que define cómo se recuperarán o modificarán los datos.
Los esquemas de GraphQL se escriben en el lenguaje de definición de esquemas (SDL). SDL está compuesto por tipos y campos con una estructura establecida:
-
Tipos: los tipos son la forma en que GraphQL define la forma y el comportamiento de los datos. GraphQL admite una multitud de tipos que se explicarán más adelante en esta sección. Cada tipo que se defina en su esquema tendrá su propio ámbito. Dentro del ámbito habrá uno o más campos que pueden contener un valor o una lógica que se utilice en el servicio GraphQL. Los tipos cumplen muchos roles diferentes, siendo las más comunes los objetos o los escalares (tipos de valores primitivos).
-
Campos: los campos existen dentro del ámbito de un tipo y contienen el valor que se solicita al servicio GraphQL. Se parecen mucho a las variables de otros lenguajes de programación. La forma de los datos que defina en sus campos determinará cómo se estructuren los datos en una operación de solicitud/respuesta. Esto permite a los desarrolladores predecir lo que se va a devolver sin saber cómo se implementa el backend del servicio.
Para visualizar el aspecto que tendría un esquema, revisemos el contenido de un esquema de GraphQL simple. En el código de producción, el esquema normalmente estará en un archivo llamado schema.graphql
o schema.json
. Supongamos que estamos analizando un proyecto que implementa un servicio de GraphQL. Este proyecto almacena los datos del personal de la empresa y el archivo schema.graphql
se utiliza para recuperar los datos del personal y añadir personal nuevo a una base de datos. El código tiene este aspecto:
Podemos ver que hay tres tipos definidos en el esquema: Person
, Query
y Mutation
. Si nos fijamos en Person
, podemos adivinar que es el esquema de la instancia del empleado de una empresa, lo que convertiría a este tipo en un objeto. Dentro de su alcance, vemos id
, name
y age
. Estos son los campos que definen las propiedades de una Person
. Esto significa que nuestro origen de datos almacena el name
de cada Person
como un tipo escalar (primitivo) String
y age
como un tipo escalar (primitivo) Int
. El id
actúa como identificador único y especial para cada Person
. También es un valor obligatorio, tal como lo indica el símbolo !
.
Los dos tipos de objetos siguientes se comportan de forma diferente. GraphQL reserva unas palabras clave para tipos de objetos especiales que definen cómo se rellenarán los datos en el esquema. Un tipo Query
recuperará los datos del origen. En nuestro ejemplo, la consulta podría recuperar objetos de Person
de una base de datos. Esto puede recordar a las operaciones GET
en la terminología RESTful. Una Mutation
modificará los datos. En nuestro ejemplo, la mutación puede añadir más objetos de Person
a la base de datos. Esto puede recordarle a operaciones que cambian de estado, como PUT
o POST
. Los comportamientos de todos los tipos de objetos especiales se explicarán más adelante en esta sección.
Supongamos que la Query
de nuestro ejemplo va a recuperar algo de la base de datos. Si nos fijamos en los campos de Query
, vemos uno llamado people
. El valor del campo es [Person]
. Esto significa que queremos recuperar alguna instancia de Person
de la base de datos. Sin embargo, la adición de corchetes significa que queremos devolver una lista de todas las instancias de Person
y no solo una específica.
El tipo Mutation
es responsable de realizar operaciones que cambian el estado, como la modificación de datos. Una mutación es responsable de realizar alguna operación de cambio de estado en el origen de datos. En nuestro ejemplo, nuestra mutación contiene una operación llamada addPerson
que agrega un nuevo objeto de Person
a la base de datos. La mutación utiliza una Person
y espera una entrada para los campos id
, name
y age
.
En este punto, quizás se pregunte cómo funcionan las operaciones como addPerson
sin una implementación de código, dado que en teoría tiene algún comportamiento y se parece mucho a una función con un nombre y parámetros de función. Actualmente, no funcionará porque un esquema solo sirve como declaración. Para implementar el comportamiento de addPerson
, deberíamos agregarle un solucionador. Un solucionador es una unidad de código que se ejecuta siempre que se llama a su campo asociado (en este caso, la operación addPerson
). Si quiere usar una operación, deberá añadir la implementación del solucionador en algún momento. En cierto modo, puede pensarse en la operación de esquema como la declaración de la función y en el solucionador como en la definición. Los solucionadores se explicarán en otra sección.
En este ejemplo se muestran solo las formas más sencillas en que un esquema puede manipular datos. Creará aplicaciones complejas, sólidas y escalables gracias a las funciones de GraphQL y AWS AppSync. En la siguiente sección, definiremos todos los diferentes tipos y comportamientos de campo que puede utilizar en su esquema.
Como puede ver, en GraphQL hay muchos componentes móviles. En esta sección, mostramos la estructura de un esquema simple y los diferentes tipos y campos que admite un esquema. En la sección siguiente, descubrirá los demás componentes de una API de GraphQL y cómo funcionan con el esquema.