Я пишу Rest API и мне интересно, как лучше всего поддерживать различные версии. Под этим я не подразумеваю, как определить URI как V2 или V3, а скорее как структурировать код, учитывая, что для этого потребуется:
- Поддержка нескольких версий одновременно, например. URI V1 & V2 & V3 должны быть активны одновременно. Я бы отказался от V1, когда, скажем, V4 входит, чтобы ограничить количество поддерживаемых в любое время.
- Избегайте максимально возможного дублирования кода
- Упростите добавление неразрывных изменений в версию, не влияя на другие версии
Казалось бы, есть несколько подходов, которые могут быть приняты:
Используйте Git для управления версиями, с ветвью для разных версий (и старых версий, по существу, без новых разработок). Это означало бы отсутствие дублирования кода, поскольку в коде присутствует только последняя версия, но предыдущие версии должны будут работать с новой версией БД, пока они не будут удалены.
Дублируйте код, чтобы каждая версия обрабатывалась в одном приложении и имела совершенно отдельный путь к коду, но это означало бы много дублирования
Повторно используйте много кода в разных версиях, но это усложнит поддержку, поскольку изменение одной версии с большей вероятностью повлияет на предыдущую версию.
Есть ли лучшая практика для решения этой проблемы, поскольку у всех вариантов есть свои проблемы?