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

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

type User {
  id: ID!
  name: String!
  age: Int
  isActive: Boolean!
}

En este ejemplo, User es un tipo de objeto que utiliza varios tipos escalares: ID, String, Int y Boolean.

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

type Post {
  id: ID!
  title: String!
  content: String
  author: User!
}

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.

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

enum Role {
  ADMIN
  USER
  GUEST
}

type User {
  id: ID!
  name: String!
  role: Role!
}

En este ejemplo, Role es un tipo de enumeración con tres valores posibles: ADMIN, USER y GUEST.

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

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

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

union SearchResult = User | Post

type Query {
  search(query: String!): [SearchResult!]
}

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:

  1. Un tipo Book con los campos id (ID), title (String), author (String) y publishedYear (Int).
  2. Un tipo Library con los campos id (ID), name (String) y books (una lista de Book).

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.

© Copyright 2024. Todos los derechos reservados