Estoy escribiendo una API Rest y me pregunto cómo manejar mejor el soporte de las diferentes versiones. Con esto no me refiero a cómo definir un URI como V2 o V3, sino cómo estructurar el código dado que necesitaría:
- Soporta múltiples versiones al mismo tiempo, por ejemplo. Los URI V1 y V2 y V3 deben estar activos al mismo tiempo. Retiraría V1 cuando digamos que V4 entra para restringir la cantidad admitida en cualquier momento.
- Evite la mayor duplicación de código posible
- Facilite la adición de cambios sin interrupciones a una versión, sin que afecte a 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 esencialmente no tienen ningún nuevo trabajo de desarrollo realizado). Esto significaría que no hay duplicación de código, ya que solo la última versión está en el código, pero las versiones anteriores tendrían que funcionar 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 haría que sea más difícil de mantener, ya que cambiar una versión es más probable que afecte a una versión anterior
¿Existe alguna práctica recomendada para tratar este problema ya que todas las opciones parecen tener sus propios problemas?