From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../idempotent/index.html" | 49 ++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "files/ru/\321\201\320\273\320\276\320\262\320\260\321\200\321\214/idempotent/index.html" (limited to 'files/ru/словарь/idempotent') diff --git "a/files/ru/\321\201\320\273\320\276\320\262\320\260\321\200\321\214/idempotent/index.html" "b/files/ru/\321\201\320\273\320\276\320\262\320\260\321\200\321\214/idempotent/index.html" new file mode 100644 index 0000000000..569dbc0168 --- /dev/null +++ "b/files/ru/\321\201\320\273\320\276\320\262\320\260\321\200\321\214/idempotent/index.html" @@ -0,0 +1,49 @@ +--- +title: Идемпотентный метод +slug: Словарь/Idempotent +tags: + - Glossary + - HTTP +translation_of: Glossary/Idempotent +--- +

Метод HTTP является идемпотентным, если повторный идентичный запрос, сделанный один или несколько раз подряд, имеет один и тот же эффект, не изменяющий состояние сервера. Другими словами, идемпотентный метод не должен иметь никаких побочных эффектов (side-effects), кроме сбора статистики или подобных операций. Корректно реализованные методы {{HTTPMethod("GET")}}, {{HTTPMethod("HEAD")}}, {{HTTPMethod("PUT")}} и {{HTTPMethod("DELETE")}} идемпотентны, но не метод {{HTTPMethod("POST")}}. Также все {{glossary("safe", "безопасные")}} методы являются идемпотентными.

+ +

Для идемпотентности нужно рассматривать только изменение фактического внутреннего состояния сервера, а возвращаемые запросами коды статуса могут отличаться: первый вызов {{HTTPMethod("DELETE")}} вернёт код {{HTTPStatus("200")}}, в то время как последующие вызовы вернут код {{HTTPStatus("404")}}. Из идемпотентности {{HTTPMethod("DELETE")}} неявно следует, что разработчики не должны использовать метод {{HTTPMethod("DELETE")}} при реализации RESTful API с функциональностью удалить последнюю запись.

+ +

Обратите внимание, что идемпотентность метода не гарантируется сервером, и некоторые приложения могут нарушать ограничение идемпотентности.

+ +

GET /pageX HTTP/1.1 идемпотентен. Вызвавший несколько раз подряд этот запрос, клиент получит тот же результат:

+ +
GET /pageX HTTP/1.1
+GET /pageX HTTP/1.1
+GET /pageX HTTP/1.1
+GET /pageX HTTP/1.1
+
+ +

POST /add_row HTTP/1.1 не идемпотентен; если его вызвать несколько раз, то он добавит несколько строк:

+ +
POST /add_row HTTP/1.1
+POST /add_row HTTP/1.1   -> Adds a 2nd row
+POST /add_row HTTP/1.1   -> Adds a 3rd row
+
+ +

DELETE /idX/delete HTTP/1.1 идемпотентен, даже если возвращаемый код отличается:

+ +
DELETE /idX/delete HTTP/1.1   -> Returns 200 if idX exists
+DELETE /idX/delete HTTP/1.1   -> Returns 404 as it just got deleted
+DELETE /idX/delete HTTP/1.1   -> Returns 404
+ +

Материалы для изучения

+ +

Общие

+ + + +

Технические

+ + -- cgit v1.2.3-54-g00ecf