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.

  1. 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 y email.
  • Consultas: users devuelve una lista de usuarios, y user devuelve un usuario específico basado en su id.
  • Mutaciones: createUser permite crear un nuevo usuario proporcionando name y email.

  1. 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 o false).
  • ID: Identificadores únicos.

Ejemplo de Tipos Escalares

type Product {
  id: ID!
  name: String!
  price: Float!
  inStock: Boolean!
}

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

type Order {
  id: ID!
  product: Product!
  quantity: Int!
  total: Float!
}

  1. 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

type Query {
  products: [Product!]!
  product(id: ID!): Product
}

Explicación del Ejemplo

  • products: Devuelve una lista de productos.
  • product: Devuelve un producto específico basado en su id.

  1. 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 su id.

  1. Definición de Suscripciones

Las suscripciones permiten a los clientes recibir actualizaciones en tiempo real. Se definen en el tipo Subscription.

Ejemplo de Suscripciones

type Subscription {
  productAdded: Product!
}

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 y Author 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.

© Copyright 2024. Todos los derechos reservados