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