GraphQL
API
Mobile
Backend
Frontend
Performance

GraphQL para aplicaciones: guía de implementación

GraphQL para aplicaciones: guía de implementación

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