Безопасные и эффективные методы

Метод считается безопасным, если он не изменяет состояние сервера: GET, HEAD и OPTIONS. Метод считается идемпотентным, если многократное выполнение одного и того же запроса имеет тот же эффект, что и однократное: GET, HEAD, OPTIONS, PUT и DELETE. Каждый безопасный метод является идемпотентным; обратное неверно, поскольку DELETE изменяет состояние и при этом остается идемпотентным.

Как это работает

Именно эти свойства делают возможными автоматические повторные попытки. Прокси-сервер, браузер или HTTP-библиотека могут повторно отправить идемпотентный запрос после истечения таймаута без запроса, поскольку повторная попытка не может ухудшить ситуацию. Методы POST и PATCH не являются ни безопасными, ни идемпотентными, поэтому ничто не отправляет вам повторные попытки — и именно поэтому существует заголовок Idempotency-Key, чтобы придать методу POST свойство, которого ему по своей природе не хватает.

Заблуждение

Идемпотентность означает "returns the same response" . Это означает тот же *эффект* на сервере. Второе удаление того же ресурса является идемпотентным, даже если первое возвращает 204, а второе — 404: конечное состояние — ресурс удален — идентично.

Попробуйте здесь.

`GET /starfleet/v1/tribbles` — это намеренный антипаттерн: запрос GET, который удваивает счетчик при каждом прочтении. Это наиболее наглядная демонстрация того, от чего вас защищает "safe" .

Источники

Другие термины

Читать страницу на английском

Все термины · Приёмы тестирования · Все 39 mock REST API

Последнее обновление