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
Vehicle
con los camposid
(ID!) ymodel
(String!). - Crea dos tipos,
Car
yBike
, que implementen la interfazVehicle
.Car
debe tener un campo adicionalnumberOfDoors
(Int!) yBike
debe 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