Inicio › Tecnología › API GraphQL
GraphQL es un lenguaje de consulta para APIs, desarrollado originalmente por Facebook, qué permite al cliente especificar en cada petición exactamente qué campos de datos necesita, en lugar de recibir la estructura fija qué devuelve cada endpoint en una API REST tradicional. Un único endpoint atiende todas las consultas, y el servidor resuelve cada campo solicitado mediante funciones llamadas resolvers, definidas sobre un esquema tipado qué describe formalmente qué datos y relaciones existen en la API. Esto resuelve dos problemas habituales de REST: el over-fetching, cuando la respuesta trae más datos de los qué la pantalla necesita, y el under-fetching, cuando hacen falta varias peticiones encadenadas para reunir toda la información de una vista. A cambio, introduce mayor complejidad en el servidor y requiere cuidado adicional para evitar consultas anidadas excesivamente costosas.
Es una forma de pedir datos a un servidor donde tú decides exactamente qué campos quieres recibir, ni uno más ni uno menos, en una sola consulta. Si una API REST normal te devolvería todos los datos de un usuario aunque solo necesites su nombre, con GraphQL pides solo el nombre y eso es justo lo qué recibes.
Considera GraphQL cuando tu aplicación tiene pantallas muy distintas qué necesitan combinaciones de datos diferentes de las mismas entidades, por ejemplo una app móvil qué necesita menos campos qué la web de escritorio, porque evita crear un endpoint REST específico para cada vista. Si en cambio tu API es sencilla, con pocos tipos de datos y clientes homogéneos, una API REST convencional suele ser más simple de construir, cachear y depurar qué añadir la complejidad de un esquema GraphQL.
No de forma universal: muchas empresas usan ambos según el caso, GraphQL para pantallas complejas con necesidades de datos muy variables y REST para operaciones simples o para exponer recursos qué se benefician del cacheo HTTP estándar.
Porque en REST cada URL identifica un recurso concreto y puede cachearse de forma estándar a nivel de HTTP o CDN, mientras qué en GraphQL todas las consultas llegan al mismo endpoint con distinto contenido en el cuerpo de la petición, lo qué exige mecanismos de caché específicos a nivel de aplicación.
El más citado es la posibilidad de qué un cliente construya una consulta anidada muy profunda o con múltiples relaciones cruzadas qué obligue al servidor a resolver una cantidad enorme de datos, un vector conocido como consulta costosa, qué se mitiga limitando la profundidad y complejidad máxima permitida.