Как проверить версию модели для API? - PullRequest
1 голос
/ 02 марта 2020

Некоторые мысли по поводу версий API:

Почему вообще необходимо управление версиями API? Это необходимо для случаев, когда мы хотим внести некоторые критические изменения в конечную точку API, например, прекратить принимать определенные параметры или если мы удалим некоторую часть ответа, чего ожидают клиенты, уже использующие наш API. В этом отношении довольно просто, как мы это делаем:

1.we create a new folder namespace api/v2;
2.we put there the controller, containing the new version of the endpoint api/v2/controllers/locations_controller.rb;
3.we implement our controller action;
4.maybe for the response we use a different active model serializer/jBuilder template.

Однако, что нам делать, если мы хотим изменить правила проверки для модели? Предположим, у нас есть поле foo, которое в версии 1 API принимает три значения a, b и c. Таким образом, в модели мы имеем валидацию, подобную следующей:

validates :foo, inclusion: { in: %w(a b c) }

Теперь мы хотим удалить одно из значений (a) и добавить новое значение (d). Если мы просто изменим валидацию в модели на

validates :foo, inclusion: { in: %w(b c d) }

, у нас возникнут как минимум две проблемы:

  1. Если клиент старой конечной точки отправляет значение a для параметра foo они получат ошибку проверки.
  2. Если мы обновим другую строку атрибута существующей записи через новую точку, которая имеет значение a для foo (устанавливается в прошлом через старую конечную точку), тогда мы получим ошибку проверки, что foo не включен в список (что будет довольно неожиданно, так как мы обновляем панель и не ожидаем никаких ошибок для foo, которые мы вообще не затрагиваем).

Я ожидаю, есть ли способ добавить управление версиями в активные модели для упоминания проверки, например, для validates_presense_of: mobile_number только для второй версии

Так что я бы хотелось бы услышать ваши мысли о таких проблемах с версионированием API, когда вы вносите изменения не только в структуру запроса и ответа и содержимое конечной точки, но и в пользовательскую часть. Основная модель. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...