Какова фактическая/обычная практика при использовании бизнес-логики в REST API и какие коды состояния HTTP используются?REST: DELETE и условия бизнес-логики
Например, можно сказать, что у меня есть объект Player и объект Team. Команда может иметь любое количество игроков.
Предположим, что моя бизнес-логика (в настоящее время) препятствует удалению команды, пока все игроки не будут явно удалены из Команды в первую очередь.
Если выполнить
DELETE http://api.foo.com/teams/15
и она до сих пор игроки, связанные с ним, вы бы вернуть HTTP 409 (конфликт) или HTTP 412 (Precondition Failed)? 412 кажется более логичным, потому что я предпочитаю использовать 409 для указания оптимистических условий блокировки.
Или, может быть, должно ли условие бизнес-логики вообще применяться в REST API? То есть, если кто-то выполняет
DELETE http://api.foo.com/teams/15
не следует, что просто удалить все игроки, а затем удалить команду автоматически? Является ли более обычным, чтобы DELETE выполнялся, поскольку API REST можно воспринимать как «низкий уровень» или более «сырой», чем интерфейсы интерфейса?
Наконец, как насчет запроса к парам в URI ресурса:
DELETE http://api.foo.com/teams/15?force=true
, который указывает, «Да, я знаю, что это не будет позволено с игроками еще в команде, но сделать это все равно ».
Идея здесь в том, что удаление команды может быть тяжелой операцией со значительными последствиями, и вы только хотите это сделать, если конечный пользователь действительно уверен, что они этого хотят.
Другими словами, сколько рук вы занимаетесь (используя коды «вы уверены?») Или вы просто выполняете его без каких-либо проверок? Я не совсем уверен, что это должно выполняться только в пользовательском интерфейсе или в REST API или и том и другом. Как большинство людей сегодня решают эту проблему?