En GraphQL, los tipos son fundamentales para definir la estructura de los datos que se pueden consultar y manipular a través de la API. Los tipos permiten a los desarrolladores especificar de manera precisa qué datos están disponibles y cómo se relacionan entre sí. En esta sección, exploraremos los diferentes tipos de GraphQL y cómo se utilizan.
Tipos Básicos de GraphQL
- Tipos Escalares
Los tipos escalares son los tipos de datos más básicos en GraphQL. Representan valores atómicos que no se descomponen en otros tipos. Los tipos escalares incorporados en GraphQL son:
- Int: Un entero de 32 bits.
- Float: Un número de punto flotante de doble precisión.
- String: Una cadena de texto.
- Boolean: Un valor booleano (true o false).
- ID: Un identificador único, representado como una cadena.
Ejemplo de Tipos Escalares
En este ejemplo, User
es un tipo de objeto que utiliza varios tipos escalares: ID
, String
, Int
y Boolean
.
- Tipos de Objetos
Los tipos de objetos son estructuras que agrupan varios campos, cada uno con su propio tipo. Los tipos de objetos son la base de la mayoría de los esquemas de GraphQL.
Ejemplo de Tipo de Objeto
Aquí, Post
es un tipo de objeto que tiene campos id
, title
, content
y author
. El campo author
es de tipo User
, lo que muestra cómo los tipos de objetos pueden referenciar otros tipos de objetos.
- Tipos de Enumeración (Enums)
Los tipos de enumeración permiten definir un conjunto de valores posibles para un campo. Son útiles para representar opciones limitadas y predefinidas.
Ejemplo de Tipo de Enumeración
En este ejemplo, Role
es un tipo de enumeración con tres valores posibles: ADMIN
, USER
y GUEST
.
- Tipos de Entrada
Los tipos de entrada se utilizan para definir los datos que se pueden pasar como argumentos en las consultas y mutaciones. Son similares a los tipos de objetos, pero se utilizan exclusivamente para la entrada de datos.
Ejemplo de Tipo de Entrada
input CreateUserInput { name: String! age: Int role: Role! } type Mutation { createUser(input: CreateUserInput!): User }
Aquí, CreateUserInput
es un tipo de entrada que se utiliza como argumento para la mutación createUser
.
- Tipos de Interfaz
Las interfaces permiten definir un conjunto de campos que deben ser implementados por otros tipos de objetos. Son útiles para crear tipos polimórficos.
Ejemplo de Tipo de Interfaz
interface Character { id: ID! name: String! } type Hero implements Character { id: ID! name: String! superPower: String! } type Villain implements Character { id: ID! name: String! evilPlan: String! }
En este ejemplo, Character
es una interfaz que define los campos id
y name
. Los tipos Hero
y Villain
implementan esta interfaz y añaden sus propios campos específicos.
- Tipos de Unión
Los tipos de unión permiten definir un campo que puede ser uno de varios tipos diferentes. A diferencia de las interfaces, los tipos de unión no requieren que los tipos compartan ningún campo en común.
Ejemplo de Tipo de Unión
En este ejemplo, SearchResult
es una unión que puede ser un User
o un Post
. La consulta search
devuelve una lista de resultados que pueden ser de cualquiera de estos tipos.
Ejercicio Práctico
Ejercicio 1: Definir Tipos
Define los siguientes tipos en GraphQL:
- Un tipo
Book
con los camposid
(ID),title
(String),author
(String) ypublishedYear
(Int). - Un tipo
Library
con los camposid
(ID),name
(String) ybooks
(una lista deBook
).
Solución
type Book { id: ID! title: String! author: String! publishedYear: Int } type Library { id: ID! name: String! books: [Book!] }
Ejercicio 2: Crear una Mutación
Crea una mutación addBook
que tome un tipo de entrada AddBookInput
con los campos title
, author
y publishedYear
, y devuelva el tipo Book
.
Solución
input AddBookInput { title: String! author: String! publishedYear: Int } type Mutation { addBook(input: AddBookInput!): Book }
Conclusión
En esta sección, hemos explorado los diferentes tipos de GraphQL, incluyendo tipos escalares, tipos de objetos, enumeraciones, tipos de entrada, interfaces y uniones. Comprender estos tipos es esencial para diseñar esquemas de GraphQL robustos y eficientes. En la siguiente sección, profundizaremos en los escalares de GraphQL y cómo se pueden personalizar para satisfacer necesidades específicas.
Curso de GraphQL
Módulo 1: Introducción a GraphQL
- ¿Qué es GraphQL?
- GraphQL vs REST
- Configuración de un Servidor GraphQL
- Conceptos Básicos del Esquema de GraphQL
Módulo 2: Conceptos Fundamentales
Módulo 3: Diseño Avanzado de Esquemas
Módulo 4: Trabajando con Datos
Módulo 5: Rendimiento y Seguridad
Módulo 6: Herramientas y Ecosistema
Módulo 7: Pruebas y Despliegue
- Pruebas Unitarias de Resolvers
- Pruebas de Integración
- Integración Continua
- Despliegue de Servidores GraphQL