HTTP DELETE метод идемпотентности

Просто основной вопрос по веб-сервисам REST HTTP DELETE метод. Согласно документации протокола HTTP, DELETE идемпотент. Но при первой отправке вы получаете код ответа 200, а при последующих запросах вы получаете ошибку 404, так как этот ресурс не существует. Итак, почему это называется идемпотент, если ответ отличается?

2 ответа

Устаревшая спецификация HTTP (RFC2616) использовала несколько нецензурную лексику вокруг описания идемпотентности, что привело к этой путанице. Более новый RFC 7231 говорит это намного лучше:

4.2.2. Идемпотентные методы

Метод запроса считается "идемпотентным", если предполагаемое влияние на сервер нескольких идентичных запросов с помощью этого метода такое же, как и эффект для одного такого запроса. Из методов запроса, определенных в этой спецификации, PUT, DELETE и безопасные методы запроса являются идемпотентными.

Обратите внимание на жирный текст "на сервере". Идемпотентность не диктует, что возвращается, она заботится о влиянии запроса на систему.

Есть ответ на REST API Tutorial:

Однако есть предостережение об УДАЛЕНИИ идемпотентности. Вызов DELETE для ресурса во второй раз часто возвращает 404 (НЕ НАЙДЕНО), так как он уже был удален и, следовательно, больше не доступен для поиска. Это, по некоторым мнениям, делает операции DELETE более не идемпотентными, однако конечное состояние ресурса остается тем же. Возврат 404 является приемлемым и точно сообщает о состоянии вызова.

Другие вопросы по тегам