Вы никогда не должны быть в этой ситуации. Если столбцы добавлены, у вас может быть DTO, который не отправляет эти новые добавленные столбцы более старым версиям. Если вам нужно удалить, то не удаляйте, прекратите использовать его для новых API, и если вам нужно изменить, создайте новый столбец и откажитесь, и пусть новые API взаимодействуют с новыми.
Сказав, что таким изменениям следует противостоять, и, если вам нужно, вам нужно найти способы, чтобы поддерживать разумность данных. Если вы перестанете использовать существующий столбец и добавите новый, как вы будете читать данные, когда будете смотреть на все это.
Что произойдет, когда новый API выполнит вызов исторических данных, что произойдет, когда вы запустите на нем инструмент отчетности.
Существует так много вопросов, на которые нужно будет ответить, кроме того, как нужно обслуживать API и как службы будут управлять изменениями.
Создание новой таблицы может быть решением, но насколько оно хорошо или плохо, зависит от вашего варианта использования, каковы изменения, каково значение данных в сервисе, каково их историческое значение, т. Е. Если вам нужно старые данные, или вы можете сбросить их и т. д.
Я чувствую, что это скорее деловое решение, чем техническое.
Что касается обратной совместимости, я пытаюсь предоставить ее на уровне моего контроллера. Я стараюсь, насколько это возможно, иметь только одну базовую логику в своем коде и отображать старый apis на новый, предоставляя значения по умолчанию или выполняя необходимые преобразования.
Я бы никогда не хотел придерживаться множества логик. Требуется некоторое усилие, но я могу найти свой путь. Возможно, ваш случай не такой, как у меня, но все же постарайтесь не хранить две таблицы или две базы данных для старого и нового API и попытаться сосредоточить изменения, связанные с управлением старым API, в одном месте.