En este tema, aprenderemos los conceptos fundamentales del esquema de GraphQL, que es la columna vertebral de cualquier API de GraphQL. Un esquema define la estructura de los datos que se pueden consultar y manipular a través de la API. Vamos a desglosar los componentes clave del esquema de GraphQL y proporcionar ejemplos prácticos para ilustrar cada concepto.
- Definición del Esquema
Un esquema de GraphQL es una descripción de los tipos de datos y las relaciones entre ellos. Se define utilizando el Lenguaje de Definición de Esquemas de GraphQL (SDL, por sus siglas en inglés). Un esquema típico incluye:
- Tipos de Objetos: Representan entidades del mundo real.
- Consultas (Queries): Permiten leer datos.
- Mutaciones (Mutations): Permiten modificar datos.
- Suscripciones (Subscriptions): Permiten recibir actualizaciones en tiempo real.
Ejemplo de un Esquema Básico
# Definición de un tipo de objeto type User { id: ID! name: String! email: String! } # Definición de la raíz de consulta type Query { users: [User!]! user(id: ID!): User } # Definición de la raíz de mutación type Mutation { createUser(name: String!, email: String!): User! }
Explicación del Ejemplo
- Tipos de Objetos:
User
es un tipo de objeto con tres campos:id
,name
yemail
. - Consultas:
users
devuelve una lista de usuarios, yuser
devuelve un usuario específico basado en suid
. - Mutaciones:
createUser
permite crear un nuevo usuario proporcionandoname
yemail
.
- Tipos de Datos en GraphQL
GraphQL soporta varios tipos de datos, incluyendo tipos escalares y tipos de objetos.
Tipos Escalares
Los tipos escalares son los tipos de datos básicos en GraphQL. Los más comunes son:
Int
: Enteros.Float
: Números de punto flotante.String
: Cadenas de texto.Boolean
: Valores booleanos (true
ofalse
).ID
: Identificadores únicos.
Ejemplo de Tipos Escalares
Tipos de Objetos
Los tipos de objetos son estructuras de datos que contienen varios campos, cada uno de los cuales puede ser de cualquier tipo, incluyendo otros tipos de objetos.
Ejemplo de Tipos de Objetos
- Definición de Consultas
Las consultas son la forma en que los clientes pueden solicitar datos del servidor. Se definen en el tipo Query
.
Ejemplo de Consultas
Explicación del Ejemplo
products
: Devuelve una lista de productos.product
: Devuelve un producto específico basado en suid
.
- Definición de Mutaciones
Las mutaciones permiten a los clientes modificar datos en el servidor. Se definen en el tipo Mutation
.
Ejemplo de Mutaciones
type Mutation { createProduct(name: String!, price: Float!, inStock: Boolean!): Product! updateProduct(id: ID!, name: String, price: Float, inStock: Boolean): Product }
Explicación del Ejemplo
createProduct
: Crea un nuevo producto.updateProduct
: Actualiza un producto existente basado en suid
.
- Definición de Suscripciones
Las suscripciones permiten a los clientes recibir actualizaciones en tiempo real. Se definen en el tipo Subscription
.
Ejemplo de Suscripciones
Explicación del Ejemplo
productAdded
: Notifica a los clientes cuando se añade un nuevo producto.
Ejercicio Práctico
Ejercicio
Define un esquema de GraphQL para una aplicación de blog que incluya los siguientes tipos y operaciones:
- Tipos:
Post
,Author
. - Consultas:
posts
,post(id: ID!)
,authors
,author(id: ID!)
. - Mutaciones:
createPost(title: String!, content: String!, authorId: ID!): Post!
,createAuthor(name: String!): Author!
.
Solución
type Post { id: ID! title: String! content: String! author: Author! } type Author { id: ID! name: String! posts: [Post!]! } type Query { posts: [Post!]! post(id: ID!): Post authors: [Author!]! author(id: ID!): Author } type Mutation { createPost(title: String!, content: String!, authorId: ID!): Post! createAuthor(name: String!): Author! }
Explicación de la Solución
- Tipos:
Post
yAuthor
representan las entidades del blog. - Consultas: Permiten obtener listas de posts y autores, así como detalles específicos de un post o autor.
- Mutaciones: Permiten crear nuevos posts y autores.
Conclusión
En esta sección, hemos cubierto los conceptos básicos del esquema de GraphQL, incluyendo la definición de tipos de objetos, consultas, mutaciones y suscripciones. Estos fundamentos son esenciales para construir cualquier API de GraphQL. En el próximo módulo, profundizaremos en los conceptos fundamentales de GraphQL, como consultas, mutaciones y resolvers.
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