Що таке ідемпотентність

ідемпотентність

Ідемпотентність - це веселе слово, яке часто вибиває людей з колії. Ідемпотентність здається іноді заплутаною концепцією, по крайней мере, якщо судити по академічному визначенням.

З точки зору RESTful-сервісу, операція (або виклик сервісу) ідемпотентна тоді, коли клієнти можуть робити один і той же виклик неодноразово при одному і тому ж результаті, працюючи як "сетер" в мові програмування. Іншими словами, створення великої кількості ідентичних запитів має такий же ефект, як і один запит. Зауважте, що в той час, як ідемпотентна операції виробляють один і той же результат на сервері (побічні ефекти), відповідь сам по собі може не бути тим же самим (наприклад, стан ресурсу може змінитися між запитами).

Методи PUT і DELETE за визначенням ідемпотентна. Проте, є один нюанс з методом DELETE. Проблема в тому, що успішний DELETE-запит повертає статус 200 (OK) або 204 (No Content), але для подальших запитів буде весь час повертати 404 (Not Found), якщо тільки сервіс не налаштований так, щоб "позначати" ресурс як віддалений без його фактичного видалення. Як би там не було, коли сервіс насправді видаляє ресурс, наступний виклик не знайде цей ресурс і поверне 404. Стан на сервері після кожного виклику DELETE те ж саме, але відповіді різні.

Методи GET, HEAD, OPTIONS і TRACE визначені як безпечні, що також робить їх Ідемпотентний. Прочитайте секцію про безпеку нижче.

Безпека

Спрощено, безпека означає, що виклик методу не має побічних ефектів. Отже, такі (безпечні) запити клієнти можуть безпечно здійснювати неодноразово, не побоюючись змінити стан сервера. Це означає, що сервіси повинні дотримуватися визначення безпеки для GET, HEAD, OPTIONS і TRACE операцій. Чи не виконання цієї властивості може призводити в оману споживача сервісу, а також викликати проблеми для веб-кешування, пошукових систем та інших автоматизованих агентів, які ненавмисно будуть змінювати стан сервера.

За визначенням, безпечні операції ідемпотентна, так як вони призводять до одного і того ж результату на сервері.

Безпечні методи реалізовані як операції тільки для читання. Однак безпека не означає, що сервер повинен повертати той же самий результат кожного разу.