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.
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.
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.
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
- Define una interfaz
Vehiclecon los camposid(ID!) ymodel(String!). - Crea dos tipos,
CaryBike, que implementen la interfazVehicle.Cardebe tener un campo adicionalnumberOfDoors(Int!) yBikedebe tener un campo adicionaltype(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.
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.
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
