GraphQL - Sistema de tipos
GraphQL es un lenguaje fuertemente tipado. Type System define varios tipos de datos que se pueden utilizar en una aplicación GraphQL. El sistema de tipos ayuda a definir el esquema, que es un contrato entre cliente y servidor. Los tipos de datos GraphQL más utilizados son los siguientes:
No Señor. | Tipos y descripción |
---|---|
1 | Scalar Almacena un solo valor |
2 | Object Muestra qué tipo de objeto se puede recuperar. |
3 | Query Tipo de punto de entrada a otros tipos específicos |
4 | Mutation Punto de entrada para la manipulación de datos |
5 | Enum Útil en una situación en la que necesita que el usuario elija de una lista prescrita de opciones |
Tipo escalar
Los tipos escalares son tipos de datos primitivos que pueden almacenar solo un valor. Los tipos escalares predeterminados que ofrece GraphQL son:
Int - Entero de 32 bits firmado
Float - Valor de coma flotante de doble precisión firmado
String - UTF - secuencia de 8 caracteres
Boolean - Verdadero o falso
ID - Un identificador único, a menudo utilizado como identificador único para buscar un objeto o como clave para un caché.
La sintaxis para definir un tipo escalar es la siguiente:
field: data_type
El fragmento que se proporciona a continuación define un campo llamado saludo que devuelve un valor de cadena.
greeting: String
Tipo de objeto
El tipo de objeto es el tipo más común utilizado en un esquema y representa un grupo de campos. Cada campo dentro de un tipo de objeto se asigna a otro tipo, lo que permite tipos anidados. En otras palabras, un tipo de objeto se compone de varios tipos escalares o tipos de objeto.
La sintaxis para definir un tipo de objeto se da a continuación:
type object_type_name
{
field1: data_type
field2:data_type
....
fieldn:data_type
}
Puede considerar el siguiente fragmento de código:
--Define an object type--
type Student {
stud_id:ID
firstname: String
age: Int
score:Float
}
--Defining a GraphQL schema--
type Query
{
stud_details:[Student]
}
El ejemplo anterior define un objeto Student de tipo de datos. El campo stud_details en el esquema de consulta raíz devolverá una lista de objetos Student.
Tipo de consulta
Se utiliza una consulta GraphQL para obtener datos. Es como solicitar un recurso en API basadas en REST. Para simplificarlo, el tipo de consulta es la solicitud enviada desde una aplicación cliente al servidor GraphQL. GraphQL usa elSchema Definition Language (SDL)para definir una consulta. El tipo de consulta es uno de los muchos tipos de nivel raíz en GraphQL.
La sintaxis para definir una consulta es la siguiente:
type Query {
field1: data_type
field2:data_type
field2(param1:data_type,param2:data_type,...paramN:data_type):data_type
}
Un ejemplo de definición de una consulta:
type Query {
greeting: String
}
Tipo de mutación
Las mutaciones son operaciones enviadas al servidor para create, update o deletedatos. Estos son análogos a los verbos PUT, POST, PATCH y DELETE para llamar a las API basadas en REST.
La mutación es uno de los tipos de datos de nivel raíz en GraphQL. El tipo de consulta define los puntos de entrada para las operaciones de obtención de datos, mientras que el tipo de mutación especifica los puntos de entrada para las operaciones de manipulación de datos.
La sintaxis para definir un tipo de mutación se proporciona a continuación:
type Mutation {
field1: data_type
field2(param1:data_type,param2:data_type,...paramN:data_type):data_type
}
Por ejemplo, podemos definir un tipo de mutación para agregar un nuevo Estudiante como se muestra a continuación:
type Mutation {
addStudent(firstName: String, lastName: String): Student
}
Tipo de enumeración
Un Enum es similar a un tipo escalar. Las enumeraciones son útiles en una situación en la que el valor de un campo debe ser de una lista prescrita de opciones.
La sintaxis para definir un tipo Enum es:
type enum_name{
value1
value2
}
El siguiente fragmento ilustra cómo se puede definir un tipo de enumeración:
type Days_of_Week{
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
}
Tipo de lista
Las listas se pueden utilizar para representar una matriz de valores de tipo específico. Las listas se definen con un modificador de tipo [] que envuelve los tipos de objetos, escalares y enumeraciones.
La siguiente sintaxis se puede utilizar para definir un tipo de lista:
field:[data_type]
El siguiente ejemplo define un tipo de lista todos -
type Query {
todos: [String]
}
Tipo no anulable
De forma predeterminada, cada uno de los tipos escalares principales se puede establecer en nulo. En otras palabras, estos tipos pueden devolver un valor del tipo especificado o no pueden tener ningún valor. Para anular este valor predeterminado y especificar que se debe definir un campo, se puede agregar un signo de exclamación (!) A un tipo. Esto asegura la presencia de valor en los resultados devueltos por la consulta.
La siguiente sintaxis se puede utilizar para definir un campo que no acepta valores NULL:
field:data_type!
En el siguiente ejemplo, stud_id se declara como un campo obligatorio.
type Student {
stud_id:ID!
firstName:String
lastName:String
fullName:String
college:College
}