6 respuestas

★ Mejor respuesta

Mantén ambas APIs funcionando en paralelo durante un tiempo: deja REST funcionando exactamente como está mientras lanzas GraphQL como un nuevo endpoint. Dale tiempo a los clientes para migrar a su propio ritmo, tal vez un año o más dependiendo de cuántos te estén usando. Documenta bien el lado de GraphQL para que la migración se sienta fácil, no forzada. Una vez que la mayoría haya cambiado, puedes deprecar REST gradualmente con mucha anticipación.

Gregory IN 🔍 Entusiasta 💬 40 respuestas

Ejecutar ambos en paralelo funciona, pero el verdadero dolor de cabeza que nadie menciona es que tendrás que mantener sincronizados tu capa de base de datos y la lógica de negocio entre dos formas de consulta diferentes: inevitablemente un equipo se inclina hacia optimizar para GraphQL mientras que los clientes REST empiezan a golpear el mismo backend y se preguntan por qué están recibiendo timeouts. Un enfoque más limpio es construir GraphQL encima de tus endpoints REST existentes como una capa adaptadora primero, así no estás manteniendo realmente dos rutas de código separadas, solo una capa de traducción que prueba que el esquema funciona antes de que toques el backend.

El enfoque de API dual tiene sentido, pero aquí está lo que muchas veces se obvia: versioná tus endpoints REST de forma explícita (como `/api/v1/`) incluso antes de introducir GraphQL. Esto te da una separación limpia y significa que cuando finalmente depreces REST, no le sacás la alfombra a quien todavía lo esté usando. Pueden quedarse en v1 para siempre si lo necesitan, y tenés un camino de deprecación claro documentado desde el día uno.

El problema de sincronización que se mencionó es real y duele. Lo que ayuda es apoyarse mucho en adaptadores internos o una capa de abstracción de consultas - básicamente un punto medio que tanto REST como GraphQL pueden usar, así tu lógica de negocio se mantiene DRY. Si construís resolvers de GraphQL que simplemente traducen a las mismas llamadas de servicio que tus controladores REST, reducís la posibilidad de que se desvíen y sirvan datos diferentes. Es un poco más trabajo al principio pero te ahorra de debuggear "por qué este campo tiene valores diferentes en GraphQL vs REST" seis meses después.

También vale la pena pensarlo: ¿qué clientes importan más? Si tenés 100 servicios internos usando tu API REST versus un puñado de consumidores públicos, tu cronograma de migración y estrategia de comunicación deberían ser totalmente distintos. Los equipos internos pueden moverse más rápido, y podés realmente forzar la migración. Los usuarios externos necesitan mucho más aviso y paciencia.

MA master87 US 🔍 Entusiasta 💬 43 respuestas

el problema mayor que la gente pasa por alto es que terminarás manteniendo dos documentaciones completamente separadas, SDKs y flujos de autenticación si no tienes cuidado, lo que significa que tu equipo de soporte se va a saturar con preguntas sobre cuál API usar, y los desarrolladores eligen la equivocada. antes de lanzar GraphQL, fija exactamente cuánto tiempo va a estar soportado REST (como 18 meses con una fecha de fin definitiva) y comunícalo sin parar, porque la ambigüedad es lo que mata estas migraciones. ¿estás planeando mantener paridad de características entre ambas APIs durante la transición, o GraphQL va a recibir nuevas características primero para incentivar el cambio?

Amy1987 asker Paridad de características inicialmente, luego GraphQL-first para nuevas características después de 12 meses para estimular la migración sin frustrar a los usuarios de REST.
SP Spring IN 🔍 Entusiasta 💬 53 respuestas

No intentes que tus esquemas REST y GraphQL se espejeen perfectamente entre sí, eso es lo que confunde a la gente. Mantenlos intencionalmente flexibles para que GraphQL pueda reformular las consultas de la forma que más le convenga a los clientes, mientras tu capa REST se mantiene estable; sincroniza a nivel de capa de datos, no a nivel de contrato de API, y evitarás la mayoría de la pesadilla de mantenimiento que conlleva intentar mantener dos interfaces idénticas.

GR Grace61 US 🔍 Entusiasta 💬 45 respuestas

No intentes cambiar REST de la noche a la mañana ni hagas algún tipo de desaprobación gradual donde ya estés empujando a los clientes hacia lo nuevo mientras lo viejo sigue existiendo - es cuando las cosas se rompen, la gente se confunde sobre qué endpoint usar, y terminas con un ecosistema fragmentado de todas formas.

El camino más limpio es estabilizar tu API REST primero. Asegúrate de que está haciendo lo que necesita hacer, documéntala correctamente, y luego añade GraphQL como una capa de servicio completamente separada encima de las mismas fuentes de datos. Esto significa que tu lógica de negocio y base de datos no necesitan saber nada de ninguno de los formatos de API - ambos simplemente están hablando con el mismo sistema subyacente. No estás duplicando código, solo estás agregando otra manera de consultarlo. Esto quita presión del problema de sincronización que aparece cuando intentas mantener dos patrones de consulta diferentes en sincronía.

Establece un cronograma realista donde ambos realmente coexistan - quizás 18 meses, quizás más dependiendo de cuántos clientes tengas. Las cosas clave que realmente importan: mantén la autenticación consistente en ambos endpoints para que los clientes no tengan que aprender nuevos patrones de autenticación, mantén una documentación clara para cada API sin dejar que se desvíen, y ten a alguien (o un equipo) realmente responsable de mantenerlos alineados. No es trabajo glamoroso, pero previene la situación donde el soporte se ve enterrado porque nadie sabe qué endpoint debería usar un cliente o por qué su código viejo de repente dejó de funcionar.

Tu respuesta

Iniciar sesiónpara responder.