Ответ
Идемпотентность — свойство HTTP-метода, означающее, что многократное выполнение одного и того же запроса с одинаковыми данными приводит к одному и тому же результату и не вызывает дополнительных побочных эффектов после первого успешного выполнения.
Идемпотентные методы (согласно RFC 7231):
GET: Получение ресурса. Повторные запросы не изменяют состояние сервера.PUT: Создание или полное замещение ресурса по известному URI. Повторные запросы с тем же телом не создают новые ресурсы.DELETE: Удаление ресурса. После первого успешного удаления ресурса последующие запросы должны возвращать404 Not Foundили410 Gone, что является одинаковым результатом.HEAD: Аналогичен GET, но без тела ответа.OPTIONSиTRACE: Также идемпотентны.
Неидемпотентный метод:
POST: Каждый запрос обычно создаёт новый ресурс, меняя состояние сервера.
Пример идемпотентности PUT:
PUT /api/users/123 HTTP/1.1
Content-Type: application/json
{"name": "Alice", "role": "admin"}
Почему это важно для тестирования и разработки API?
- Безопасность повторных запросов: Клиент может безопасно повторять запрос при таймаутах или сетевых сбоях, не опасаясь дублирования операций (например, списания денег дважды).
- Тестирование: Идемпотентные эндпоинты проще тестировать, так как их можно вызывать многократно, не очищая состояние.
- Проектирование: При создании API следует стремиться к идемпотентности для методов обновления (
PUT,PATCHдля определённых операций) и удаления.