diff options
author | Florian Merz <me@fiji-flo.de> | 2021-02-11 14:51:05 +0100 |
---|---|---|
committer | Florian Merz <me@fiji-flo.de> | 2021-02-11 14:51:05 +0100 |
commit | c058fa0fb22dc40ef0225b21a97578cddd0aaffa (patch) | |
tree | df20f8b4c724b61cb9c34cdb450a7ac77d690bd0 /files/ru/glossary/idempotent | |
parent | 8260a606c143e6b55a467edf017a56bdcd6cba7e (diff) | |
download | translated-content-c058fa0fb22dc40ef0225b21a97578cddd0aaffa.tar.gz translated-content-c058fa0fb22dc40ef0225b21a97578cddd0aaffa.tar.bz2 translated-content-c058fa0fb22dc40ef0225b21a97578cddd0aaffa.zip |
unslug ru: move
Diffstat (limited to 'files/ru/glossary/idempotent')
-rw-r--r-- | files/ru/glossary/idempotent/index.html | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/files/ru/glossary/idempotent/index.html b/files/ru/glossary/idempotent/index.html new file mode 100644 index 0000000000..569dbc0168 --- /dev/null +++ b/files/ru/glossary/idempotent/index.html @@ -0,0 +1,49 @@ +--- +title: Идемпотентный метод +slug: Словарь/Idempotent +tags: + - Glossary + - HTTP +translation_of: Glossary/Idempotent +--- +<p>Метод HTTP является идемпотентным, если повторный идентичный запрос, сделанный один или несколько раз подряд, имеет один и тот же эффект, не изменяющий состояние сервера. Другими словами, идемпотентный метод не должен иметь никаких побочных эффектов (side-effects), кроме сбора статистики или подобных операций. Корректно реализованные методы {{HTTPMethod("GET")}}, {{HTTPMethod("HEAD")}}, {{HTTPMethod("PUT")}} и {{HTTPMethod("DELETE")}} <strong>идемпотентны</strong>, но не метод {{HTTPMethod("POST")}}. Также все {{glossary("safe", "безопасные")}} методы являются идемпотентными.</p> + +<p>Для идемпотентности нужно рассматривать только изменение фактического внутреннего состояния сервера, а возвращаемые запросами коды статуса могут отличаться: первый вызов {{HTTPMethod("DELETE")}} вернёт код {{HTTPStatus("200")}}, в то время как последующие вызовы вернут код {{HTTPStatus("404")}}. Из идемпотентности {{HTTPMethod("DELETE")}} неявно следует, что разработчики не должны использовать метод {{HTTPMethod("DELETE")}} при реализации RESTful API с функциональностью <em><strong>удалить последнюю запись</strong></em>.</p> + +<p>Обратите внимание, что идемпотентность метода не гарантируется сервером, и некоторые приложения могут нарушать ограничение идемпотентности.</p> + +<p><code>GET /pageX HTTP/1.1</code> идемпотентен. Вызвавший несколько раз подряд этот запрос, клиент получит тот же результат:</p> + +<pre class="notranslate">GET /pageX HTTP/1.1 +GET /pageX HTTP/1.1 +GET /pageX HTTP/1.1 +GET /pageX HTTP/1.1 +</pre> + +<p><code>POST /add_row HTTP/1.1</code> не идемпотентен; если его вызвать несколько раз, то он добавит несколько строк:</p> + +<pre class="notranslate">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 +</pre> + +<p><code>DELETE /idX/delete HTTP/1.1</code> идемпотентен, даже если возвращаемый код отличается:</p> + +<pre class="notranslate">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</pre> + +<h2 id="Материалы_для_изучения">Материалы для изучения</h2> + +<h3 id="Общие">Общие</h3> + +<ul> + <li>Определение <a href="https://tools.ietf.org/html/rfc7231#section-4.2.2">идемпотентности</a> в спецификации HTTP.</li> +</ul> + +<h3 id="Технические">Технические</h3> + +<ul> + <li>Описание общих идемпотентных методов: {{HTTPMethod("GET")}}, {{HTTPMethod("HEAD")}}, {{HTTPMethod("PUT")}}, {{HTTPMethod("DELETE")}}, {{HTTPMethod("OPTIONS")}}</li> + <li>Описание общих неидемпотентных методов: {{HTTPMethod("POST")}}</li> +</ul> |