GraphQL revolucionó la forma en que las aplicaciones consumen API. En lugar de puntos finales fijos, el cliente solicita exactamente los datos que necesita. Esta guía presenta GraphQL, su comparación con REST y cómo implementarlo en aplicaciones móviles.
¿Qué es GraphQL?
Definición
Lenguaje de consulta para API desarrollado por Facebook.
Concepto
El cliente define la estructura de respuesta, no el servidor.
Esquema
Contrato mecanografiado que define los datos disponibles.
GraphQL frente a DESCANSO
Recuperación excesiva
REST devuelve datos fijos. GraphQL devuelve solo el orden.
Infravalorado
REST puede requerir varias llamadas. GraphQL en una consulta.
Flexibilidad
El cliente controla lo que recibe.
Control de versiones
GraphQL evoluciona el esquema sin versiones de API.
Conceptos fundamentales
Consulta
Obtener datos. Leer operaciones.
Mutación
Modificar datos. Escribir operaciones.
Suscripción
Datos en tiempo real a través de WebSocket.
Esquema
Definición de tipos y operaciones.
Resolver
Función que recupera datos para cada campo.
Ventajas para el móvil
Economía de datos
Menos bytes transferidos.
Menos latencia
Una llamada frente a varias.
Sin conexión primero
Caché más inteligente posible.
escribiendo
Esquema como contrato. Generación de código.
Implementación de backend
Servidores GraphQL
Servidor Apollo, GraphQL Yoga, Hasura.
Diseño de esquema
Dominio del modelo, no base de datos.
Resolutores
Obtenga datos de cualquier fuente.
###Cargador de datos
Lotes para evitar consultas n+1.
Clientes móviles
###ClienteApolo
iOS, Android, reaccionar nativo. Rico en funciones.
Relevo
facebook. Opinión, optimizado.
Solicitud GraphQL
Tómalo. Para casos sencillos.
Generación de código
Tipos generados a partir del esquema. Tipo de seguridad.
Lenguaje de consulta
Campos
Especifica exactamente lo que quieres.
Argumentos
Filtrar y personalizar.
Alias
Cambie el nombre de los campos en la respuesta.
Fragmentos
Reutilizar selecciones.
Variables
Parámetros dinámicos.
Mutaciones
Sintaxis
Similar a la consulta, pero para modificar.
Tipos de entrada
Objetos complejos como parámetro.
Respuesta
Devolver datos actualizados.
Actualización optimista
Actualizaciones de la interfaz de usuario antes de la respuesta.
Suscripciones
Casos de uso
Chat, notificaciones, feeds en tiempo real.
Transporte
WebSocket, SSE.
Almacenamiento en caché
Actualiza automáticamente el caché.
Almacenamiento en caché
Caché normalizado
Entidades almacenadas por ID.
Obtener políticas
caché primero, solo red, caché y red.
Invalidación
Actualizar caché después de mutaciones.
Persistencia
Caché persistente para fuera de línea.
##Rendimiento
Complejidad de la consulta
Limite la profundidad y la complejidad.
Paginación
[Basado en el cursor 6 para listas grandes.
Consultas persistentes
Hash en lugar de cadena completa.
CDN
Almacenamiento en caché perimetral para consultas públicas.
Seguridad
Autenticación
Token en el encabezado.
Autorización
Validar permisos en resolutores.
Limitación de velocidad
Por operación, no por punto final.
Profundidad de consulta
Limite la profundidad para evitar abusos.
Manejo de errores
Éxito parcial
GraphQL puede devolver datos y errores.
Tipos de errores
Personalizar por tipo de error.
Manejo de clientes
Maneje los errores con gracia.
Herramientas
###GraphiQL/Parque infantil
Interfaz para explorar el esquema.
Generadores de código
Graphql-codegen. Tipos automáticos.
Estudio Apolo
Monitoreo, registro de esquemas.
pelusa
eslint-plugin-graphql.
Migración REST
Gradual
Agregue GraphQL junto a REST.
Federación
Múltiples servicios GraphQL unidos.
Envoltura
GraphQL delante del REST existente.
Mejores prácticas
Esquema primero
Defina el esquema antes de implementarlo.
Nombrar
Convenciones claras. Tipos PascalCase, campos camelCase.
Documentación
Descripciones en el esquema.
Depreciación
Marcar campos obsoletos.
Cuándo usar GraphQL
Bueno para
- Aplicaciones móviles con datos complejos.
- Múltiples clientes diferentes
- Iteración rápida del producto
No es ideal para
- API simples
- Carga de archivos pesados
- Intensivo en tiempo real (considere gRPC)
Conclusión
GraphQL es potente para aplicaciones móviles que necesitan eficiencia y flexibilidad. Aprenda los conceptos, elija la pila adecuada e impleméntela con disciplina. El resultado son aplicaciones más rápidas y un desarrollo más productivo.
##Preguntas frecuentes
1) ¿GraphQL reemplaza REST? No necesariamente. Cada uno tiene casos de uso. Pueden coexistir.
2) ¿GraphQL es más lento que REST? No inherentemente. Depende de la implementación.
3) ¿Necesito reescribir el backend? No. GraphQL puede empaquetar servicios existentes.
4) ¿Específico para dispositivos móviles o funciona para la web? Funciona para cualquier cliente. El móvil beneficia mucho.
5) ¿Es obligatorio Apolo? No. Es popular pero hay alternativas.
Lea también
- API GraphQL modernas: diseño de esquemas, rendimiento y patrones que funcionan
- GraphQL en aplicaciones: costos, precios y una lista de verificación antes de adoptar
- Backend para Aplicaciones: Arquitectura, Tecnologías y Mejores Prácticas
- Microservicios en Aplicaciones: Arquitectura Distribuida para Móviles
- GraphQL para Aplicaciones: Costos y Precios con Casos Reales
- API para aplicaciones
