Anteriormente había hablado sobre las APIs de REST y el proceso que conlleva. Ahora explicaré algunas diferencias en cuanto a las APIs de GraphQL.
GraphQL es un lenguaje de manipulación y consulta de datos para APIs. También es un runtime para completar consultas con datos existentes. Es de código abierto y fue desarrollado por Facebook en 2012 para luego ser publicado en 2015.
GraphQL tiene solo un endpoint
Una API REST puede manejar ambos, tanto un solo endpoint como múltiples, aunque el estándar de REST se utiliza mayormente múltiples endpoints según la sección y acción:
Por ejemplo, un endpoint de REST seria:
www.mipagina.com/persons
Y de allí manipularíamos toda la información de una persona con las acciones POST, GET, DELETE, PUT, PATCH.
Tendríamos que crear otros endpoints para manipular otros datos «/ítems», «/libros», «/facturas», etc. Y a su vez cada acción.
Mientras que en GraphQL solo existiría un endpoint
www.mipagina.com/graphql
Comúnmente llamado «graphql» pero puede tener cualquier otro nombre y es donde se realiza todas las consultas y acciones a través de objetos.
GraphQL es auto documentado
Antiguamente muchas API debían ser documentadas manualmente y hacer público los métodos, parámetros, descripciones, acciones de cada función. Esto añadía una tarea extra a los desarrolladores y debían actualizar la documentación con cada cambio. Actualmente tanto para GraphQL como REST poseen la funcionalidad de generar la documentación automáticamente, generando una página web donde se explica brevemente cada función pública, los parámetros necesarios y los tipos de dato que devuelve.
Manejo de la cantidad de datos (datos insuficientes, datos excesivos)
Una limitación de las API de REST es que, al hacer una consulta, devuelve datos fijos con los cuales fue programado. Esto conlleva a un problema de overfetching (datos excesivos) cuando buscas algo en particular y devuelve mucho más de lo que necesitas. El otro problema es underfetching (datos insuficientes) cuando buscas información general y solo obtienes datos específicos, obligando a realizar otras consultas.
GraphQL nos permite seleccionar los datos a obtener en la consulta porque realmente es un lenguaje de consulta (Graph Query Language), con la ventaja de que solo limitamos los datos que queremos y la respuesta es acorde a lo que necesitamos.
Ejemplo de un objeto de consulta:
Permitiéndonos seleccionar la cantidad justa de datos sin perder información ni obtener información de más.
Aclaro para este problema de underfetching/overfetching en API REST, simplemente debemos asegurarnos de construir nuestra API con los datos necesarios, nosotros nos encargaríamos de tener las funciones necesarias para cada caso que se requiera.
En cuanto a la versatilidad de los datos en GraphQL, también hay que tomar en cuenta que puede ser un riesgo de seguridad si se le permite obtener datos sensibles como contraseñas o cualquier información que no debe ser pública.
Herramientas de consulta
Para API REST podemos contar con programas como POSTMAN, que nos ayudan en nuestro desarrollo, provee una plataforma de fácil visualización de datos de envío/respuesta, generación de consultas y testing.
Para GraphQL podemos usar herramientas como GraphiQL
Ambas tecnologías son parte de nuestro día a día y es ideal aprender ambas para el caso de que nos toque trabajar con algún proyecto que lo incluya.