В (правильном RMM уровне 3) RESTful HTTP API я хочу обеспечить тот факт, что клиенты должны делать условные запросы при обновлении ресурсов, чтобы избежать проблемы потерянного обновления . Каким будет соответствующий ответ для возврата клиентам, которые неправильно пытаются выполнить безусловные запросы PUT?
Замечу, что (отменено?) mod_atom возвращает 405 Method Not Allowed
с заголовком Allow
, установленным в GET, HEAD
( просмотр источника ) при попытке безусловного обновления , Это кажется немного вводящим в заблуждение - для меня это означает, что PUT никогда не является допустимым методом для попытки использования ресурса. Возможно, в ответе просто необходим объект сущности, объясняющий, что If-Match
или If-Unmodified-Since
должны использоваться для того, чтобы сделать запрос PUT
условным, в таком случае он будет разрешен?
Или, возможно, 400 Bad Request
с подходящим объяснением в теле сущности будет лучшим решением? Но опять же, это не совсем правильно, потому что он использует ответ 400
для нарушения семантики, специфичной для приложения, когда RFC 2616 говорит (мой акцент):
Сервер не смог понять запрос из-за неправильного синтаксиса .
Но, опять же, я думаю, что использование 400 Bad Request
для специфической семантики приложения становится широко принятым прагматическим решением (необходима цитата!), И я просто чрезмерно педантичен.