Estrategia de migración API REST a GraphQL - introducción ( Ruby on Rails )

Sommaire
Este artículo tiene como objetivo compartir la experiencia sobre la migración de nuestra API REST a GraphQL, así como presentar el plan de acción que se implementó.
Aunque usamos Ruby con Ruby On Rails, ¡este plan de acción es válido para otros frameworks!
Motivaciones
¿Por qué pasar de REST a GraphQL ?
Varias razones me vienen a la mente, la primera de ellas: la flexibilidad.
Primero, un poco de contexto: éramos, en el momento de la migración, un pequeño equipo de desarrolladores: 2 desarrolladores frontend, 1 desarrollador backend, 1 lead dev full-stack. Teníamos a nuestro cargo varias aplicaciones frontend que consumían una API (nuestro backend).
REST es perfectamente adecuado para este tipo de proyecto, sin embargo, para nuestro pequeño equipo, ocurría que nuestros desarrolladores frontend se quedaban bloqueados por un endpoint de la API que faltaba, que estaba en desarrollo, para realizar/finalizar una funcionalidad.
Otra razón invocada es el caso de uso mismo de GraphQL: ofrece una flexibilidad que permite a los desarrolladores frontend describir las respuestas y los formatos de datos deseados.
Se ofrece entonces una cierta libertad a los desarrolladores frontend durante su desarrollo; pueden expresar consultas que están específicamente diseñadas para sus interfaces.
¿Está REST obsoleto ?
¡No! Creo que REST sigue siendo un buen enfoque; algunas complejidades back introducidas por GraphQL (notablemente la caché del servidor) tienen soluciones sencillas con un enfoque REST. No obstante, la creciente popularidad de GraphQL sugiere que su adopción es real y acabará conviviendo con APIs REST.
Me interesa, cuéntame más
Te propongo el plan de acción que implementamos para ofrecer una continuidad de servicio para las aplicaciones y clientes que consumen la versión REST de nuestro servicio, al mismo tiempo que creábamos una versión GraphQL de nuestra API.
Plan d'action
Trabajo preparatorio
- Inventariar los controllers y actions que estarán presentes en la versión GraphQL de la API.
- Extraer las actions de los controllers en objetos (inspirarse en el patrón de diseño "command").
- Actualizar la cobertura de tests.
Configuración del routing
- Implementar la estrategia de routing: filtrado y routing por header "accept".
Instalación y configuración de GraphQL
- Instalar GraphQL.
- Crear los modelos GraphQL específicos para los modelos ActiveRecord.
- Crear las diferentes queries & mutations.
Conclusión & retorno de experiencia
Primero, la fase preparatoria nos permitió hacer una buena limpieza en nuestra base de código: pudimos identificar el código no utilizado, refactorizar y optimizar el código que lo merecía, así como mejorar nuestra cobertura de tests global.
Después, implementamos una estrategia de routing por header "accept" que nos permitió hacer convivir las dos versiones de la API, permitiendo una continuidad de servicio para los diferentes consumidores de nuestra API.
Para terminar, GraphQL está relativamente bien integrado en el ecosistema Ruby on Rails. Numerosos artículos y tutoriales están disponibles en la red. Algunas nociones importantes como la ofuscación del esquema, la creación de tipos personalizados, las autorizaciones, etc., están muy bien explicadas.
En cuanto al uso diario por parte del frontend, pasado el tiempo de configuración y migración ( axios → appolo ), el uso de GraphQL nos permitió aumentar la autonomía y la productividad de nuestros desarrolladores frontend.
En mi opinión, esta decisión fue la correcta para nuestro equipo; nos permitió añadir valor a nuestra API, en términos de funcionalidad pero también en términos de robustez gracias a los diferentes refactors y a la mejora de nuestra cobertura de tests.
¿Y después?
Voy a realizar una serie de artículos que entrarán más específicamente en los detalles de algunas etapas clave presentadas en el plan de acción.
Mientras tanto, les dejo algunos enlaces útiles relacionados con la temática del artículo.
Enlaces
Refactorización & pruebas unitarias
- Patrón de diseño command : Artículo sobre el patrón Command y MVC
- Pruebas unitarias rspec : RSpec - pruebas unitarias
Ruby on rails / API / GraphQL
- Versionado de la API de Rails : https://bignerdranch.com/blog/adding-versions-to-a-rails-api/
- GraphQL ruby : https://graphql-ruby.org/
- Configuración de GraphQL en Rails : https://www.digitalocean.com/community/tutorials/how-to-set-up-a-ruby-on-rails-graphql-api
- Uso de GraphQL con Rails: https://www.apollographql.com/blog/community/backend/using-graphql-with-ruby-on-rails/
Comentarios
Cargando...