Estou escrevendo uma API Rest e estou pensando em como lidar melhor com o suporte a diferentes versões. Por isso, não quero dizer como definir um URI como V2 ou V3, mas como estruturar o código, pois ele precisa:
- Suporte várias versões ao mesmo tempo, por exemplo. Os URIs V1 e V2 e V3 devem estar ativos ao mesmo tempo. Eu me aposentaria do V1 quando o V4 chegasse, a fim de restringir o valor suportado a qualquer momento.
- Evite o máximo de duplicação de código possível
- Facilite a adição de alterações sem interrupção a uma versão, sem impactar em outras versões
Parece que existem poucas abordagens que podem ser adotadas:
Use o Git para controlar as versões, com uma ramificação para as diferentes versões (e versões antigas não tendo, essencialmente, novos trabalhos de desenvolvimento). Isso significaria nenhuma duplicação de código, pois apenas a versão mais recente está no código, mas as versões anteriores precisariam trabalhar com a nova versão do banco de dados até que sejam desativadas.
Código duplicado para que cada versão seja manipulada no mesmo aplicativo e tenha um caminho de código totalmente separado, mas isso significaria muita duplicação
Reutilize muito código nas versões, mas isso tornaria mais difícil a manutenção, pois a alteração de uma versão tem mais probabilidade de afetar uma versão anterior
Existe alguma prática recomendada para lidar com esse problema, pois todas as opções parecem ter seus próprios problemas?