GraphQL
Un lenguaje de APIs donde la app pide justo los campos que necesita, en un solo pedido.
GraphQL es una forma de armar APIs en la que el cliente escribe una consulta (query) que describe exactamente los datos que quiere, y el servidor responde con JSON con esa misma forma. Se creó en Facebook en 2012 para alimentar sus apps móviles, se publicó en 2015 y hoy lo mantiene la GraphQL Foundation, parte de la Linux Foundation.
Comparalo con una API REST. Para mostrar una pantalla de perfil, una app REST quizás llama a /users/7, después a /users/7/orders, después a /orders/91/items, y recibe un montón de campos que nunca muestra. Con GraphQL manda un solo pedido a un único endpoint, normalmente /graphql, diciendo "usuario 7: nombre, y los dos últimos pedidos con su total", y recibe solo eso. Así evita el over-fetching (traer de más) y el under-fetching (necesitar muchas idas y vueltas), algo que pesa en conexiones móviles lentas.
Detrás del endpoint hay un schema (esquema): una descripción tipada de cada objeto y campo que ofrece la API, que las herramientas usan para autocompletar y validar consultas antes de correrlas. Cada campo lo completa una función chica llamada resolver, que puede leer de una base de datos, de un servicio REST o de lo que sea. La flexibilidad tiene costos: cachear es más difícil que con URLs simples, y una consulta descuidada puede pedir tantos datos anidados que sobrecargue el servidor, así que las APIs en producción limitan la profundidad y el costo de las consultas.
Para quedarse
- Un solo endpoint; la consulta del cliente decide la forma de la respuesta.
- Un schema tipado lista todo lo que se puede pedir.
- Evita traer datos de más o hacer muchas idas y vueltas.
- Es más difícil de cachear y necesita límites contra consultas muy caras.