Estoy escribiendo una API de Rest y me pregunto cuál es la mejor manera de manejar la compatibilidad con las diferentes versiones. Con esto no me refiero a cómo definir un URI como V2 o V3, sino más bien cómo estructurar el código dado que debería:
- Admite varias versiones al mismo tiempo, por ejemplo. V1 & V2 & Las URI V3 deben estar activas al mismo tiempo. Retiraría V1 cuando diga V4 para restringir la cantidad admitida en cualquier momento.
- Evita la duplicación de código tanto como sea posible
- Facilita la adición de cambios ininterrumpidos a una versión, sin que tenga impacto en otras versiones
Parece que hay pocos enfoques que podrían adoptarse:
-
Use Git para controlar las versiones, con una rama para las diferentes versiones (y las versiones antiguas no tienen esencialmente ningún nuevo trabajo de desarrollo). Esto significaría que no habrá duplicación de código, ya que solo la última versión está en el código, pero las versiones anteriores tendrían que trabajar con la nueva versión de la base de datos hasta que se retiren.
-
Duplique el código para que cada versión se maneje en la misma aplicación y tenga una ruta de código totalmente separada, pero esto significaría mucha duplicación
-
Reutilice una gran cantidad de código en las versiones, pero esto dificultaría el mantenimiento, ya que es más probable que el cambio de una versión tenga un impacto en una versión anterior
¿Existe alguna práctica recomendada para tratar este problema ya que todas las opciones parecen tener sus propios problemas?