Diseño de inputs para queries y mutations
Este estándar define la estructura de inputs de todas las queries y mutations de nuestras APIs GraphQL: un único input object con filtros, búsqueda, ordenamiento y paginación consistentes.
El problema
Sin una estructura estándar, cada query inventa su propia forma de pasar parámetros y la API se vuelve inconsistente, difícil de usar y difícil de mantener a medida que crece. Los síntomas típicos:
- Convenciones de parámetros inconsistentes entre queries.
- Filtros y ordenamiento que no escalan a casos complejos.
- Opciones difíciles de descubrir.
- Manejo de versiones complicado.
- Estructura de entrada difícil de documentar.
La solución: un input object estandarizado
Todas las queries y mutations envuelven sus parámetros en un único argumento input con una estructura consistente:
- Input object raíz: todos los parámetros se pasan por un único argumento
input. - Identificadores: los IDs del recurso (por ejemplo
organizationId,userId) van como propiedades directas del input. - Objeto
filter: objeto anidado para filtrar, con operadores consistentes. - Objeto
search: parámetros de búsqueda estructurados. - Arreglo
sort: mecanismo estándar de ordenamiento. - Objeto
pagination: controles de paginación consistentes.
Requisitos obligatorios
Todo diseño nuevo de schema para queries y mutations cumple estos requisitos:
- Input único: usa siempre un único parámetro llamado
inputque recibe un input object. - Naming consistente: todo input type termina con el sufijo
Input(por ejemplo,ATSListJobApplicantInput). - Operadores estándar: usa sufijos de operador consistentes al filtrar:
_eq,_neqpara igualdad_gt,_gte,_lt,_ltepara comparaciones_in,_ninpara inclusión o exclusión en arreglos
- Paginación: toda query de listado soporta la paginación estándar.
- Ordenamiento: toda query de listado soporta ordenar por sus campos relevantes.
- Búsqueda: donde aplique, implementa el patrón estándar de búsqueda.
- Identificadores: los identificadores de la entidad van siempre como campos de primer nivel del input object.
- Documentación: todo campo del input lleva su descripción.
Definición del schema
Ejemplos de uso
Listar postulantes de una vacante
Con estas variables:
Búsqueda de productos
Con estas variables:
Ventajas y desventajas
El patrón gana consistencia a cambio de verbosidad.
Ventajas:
- Consistencia: estructura uniforme en todas las queries y mutations.
- Escalabilidad: se extiende con nuevas opciones de filtro sin breaking changes.
- Descubrimiento: los patrones claros hacen más fácil deducir qué opciones existen.
- Mantenibilidad: los patrones consistentes simplifican el mantenimiento de la API.
- Documentación: es más fácil documentar y entender el formato de entrada esperado.
- Evolución: la API evoluciona gradualmente sin romper a los clientes.
- Menos boilerplate: la paginación y el ordenamiento quedan estandarizados.
Desventajas:
- Verbosidad: más verboso que pasar parámetros simples en queries simples.
- Curva de aprendizaje: quien llega al equipo necesita aprender las convenciones del patrón.
- Complejidad de implementación: el backend necesita más código para manejar la estructura flexible.
- Performance: el filtrado genérico puede ser menos performante que una query especializada.
- Tamaño del schema: la documentación del schema de GraphQL puede crecer.

