Лучший подход для управления версиями API при добавлении новой проверки бизнеса - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть проект для ведения записей о пользователе и его / ее распределении. Проект предоставляет API REST для поддержки операций CRUD пользователя / проекта. Конечные точки REST разработаны для поддержки обратной совместимости с использованием версий REST API, поэтому любые новые изменения в REST API не должны влиять на существующего потребителя этого API.

У меня есть приведенный ниже вариант использования, где мне нужно предложения по лучшему подходу: Сначала бизнес-требование заключалось в том, что пользователь может быть удален независимо от его / ее распределения в каком-либо проекте, и, следовательно, для поддержки этого был создан API REST для удаления пользователя с версией v1. Но затем изменилось требование о том, что пользователь не может быть удален, если ему / ей выделен какой-то проект.

Это изменение в проверке бизнеса. Должен ли я создать новую версию (v2) пользователя DELETE REST API для поддержки этой бизнес-проверки или мне следует добавить эту бизнес-проверку в существующую версию (v1) пользователя DELETE REST API?

Моя точка зрения : Если я представлю две версии пользовательского DELETE REST API, то в базе данных могут быть записи как с удаленными пользователями, так и без проекта

1 Ответ

1 голос
/ 29 апреля 2020

Я бы сказал, что это скорее деталь реализации резервного хранилища. По всей вероятности, механизм хранения для обоих почти наверняка одинаков.

Я бы не изменил ни API DELETE, ни версию, потому что контракт на 100% одинаков по сети. Клиент не знает, как это реализовано за кулисами; они не должны в любом случае. Реализация должна измениться так, чтобы DELETE всегда приводил к мягкому удалению через некоторый момент времени (например, когда вы публикуете sh новую версию). Если вы используете DELETE, вы также открываете вещи, где клиенты могут делать то, что вы не собираетесь; например, запуск реального удаления с использованием указанной c версии API.

Необходимо изменить то, как старые API работают со всеми другими поддерживаемыми методами, такими как GET, POST, PATCH и т. Д. Более старые API должны давать 404 для мягко удаленного ресурса (подразумевая, что DELETE был постоянным). POST вероятно самый необычный случай. Это может вернуть 409, но это означает, что ресурс существует, или это может привести к обновлению, которое также восстанавливает существующего ресурса. Этот API, вероятно, даже продолжит возвращать 201, подразумевая, что ресурс был создан, когда он действительно был только что обновлен в хранилище.

Помните, что Передача репрезентативного состояния - это просто представление вашей бизнес-логики c. Сохраняйте API-интерфейсы одинаковыми (и, следовательно, клиенты ломаются) и корректируйте реализацию для адаптации к новым правилам. API DELETE не изменяется (и обычно не зависит от версии). Клиенты не знают, что делает человек за занавеской . Если по проводам дела продолжаются одинаково, клиенты не мудрее.

Надеюсь, это поможет.

...