Introducción

En GraphQL, las interfaces son una poderosa característica que permite definir un conjunto de campos que deben ser implementados por uno o más tipos. Esto es útil para crear esquemas más flexibles y reutilizables. En esta sección, aprenderemos qué son las interfaces, cómo definirlas y cómo utilizarlas en nuestras consultas.

¿Qué es una Interfaz en GraphQL?

Una interfaz en GraphQL es un tipo abstracto que define un conjunto de campos que deben ser implementados por otros tipos. Las interfaces permiten que diferentes tipos compartan un conjunto común de campos, lo que facilita la creación de consultas más genéricas y reutilizables.

Ejemplo de Interfaz

Imaginemos que estamos construyendo una API para una aplicación de medios sociales. Podríamos tener diferentes tipos de contenido, como Post y Comment, pero ambos comparten algunos campos comunes, como id y content. Podemos definir una interfaz Content para representar estos campos comunes.

# Definición de la interfaz Content
interface Content {
  id: ID!
  content: String!
}

# Implementación de la interfaz Content en el tipo Post
type Post implements Content {
  id: ID!
  content: String!
  title: String!
}

# Implementación de la interfaz Content en el tipo Comment
type Comment implements Content {
  id: ID!
  content: String!
  author: String!
}

En este ejemplo, tanto Post como Comment implementan la interfaz Content, lo que significa que ambos tipos deben tener los campos id y content.

Definiendo Interfaces

Para definir una interfaz en GraphQL, utilizamos la palabra clave interface seguida del nombre de la interfaz y los campos que debe contener.

interface Content {
  id: ID!
  content: String!
}

Implementando Interfaces

Para que un tipo implemente una interfaz, utilizamos la palabra clave implements seguida del nombre de la interfaz. El tipo debe definir todos los campos especificados en la interfaz.

type Post implements Content {
  id: ID!
  content: String!
  title: String!
}

Consultas con Interfaces

Cuando realizamos consultas que involucran interfaces, podemos solicitar los campos definidos en la interfaz y también los campos específicos de los tipos que implementan la interfaz.

Ejemplo de Consulta

Supongamos que queremos obtener una lista de contenidos que pueden ser Post o Comment. Podemos hacer una consulta que devuelva una lista de Content y utilizar fragmentos para obtener los campos específicos de cada tipo.

query {
  contents {
    id
    content
    ... on Post {
      title
    }
    ... on Comment {
      author
    }
  }
}

En esta consulta, contents devuelve una lista de Content, y utilizamos fragmentos (... on Post y ... on Comment) para obtener los campos específicos de Post y Comment.

Ejercicio Práctico

Ejercicio

  1. Define una interfaz Vehicle con los campos id (ID!) y model (String!).
  2. Crea dos tipos, Car y Bike, que implementen la interfaz Vehicle. Car debe tener un campo adicional numberOfDoors (Int!) y Bike debe tener un campo adicional type (String!).

Solución

# Definición de la interfaz Vehicle
interface Vehicle {
  id: ID!
  model: String!
}

# Implementación de la interfaz Vehicle en el tipo Car
type Car implements Vehicle {
  id: ID!
  model: String!
  numberOfDoors: Int!
}

# Implementación de la interfaz Vehicle en el tipo Bike
type Bike implements Vehicle {
  id: ID!
  model: String!
  type: String!
}

Consulta de Ejemplo

Realiza una consulta para obtener una lista de vehículos, incluyendo los campos específicos de Car y Bike.

query {
  vehicles {
    id
    model
    ... on Car {
      numberOfDoors
    }
    ... on Bike {
      type
    }
  }
}

Conclusión

Las interfaces en GraphQL son una herramienta poderosa para crear esquemas flexibles y reutilizables. Permiten definir un conjunto común de campos que pueden ser implementados por diferentes tipos, facilitando la creación de consultas genéricas. En esta sección, hemos aprendido cómo definir e implementar interfaces, así como cómo utilizarlas en nuestras consultas. En el próximo tema, exploraremos las uniones, otra característica avanzada de GraphQL que nos permite combinar diferentes tipos en una sola consulta.

© Copyright 2024. Todos los derechos reservados