Ответ
Нет, метод PATCH не является идемпотентным по умолчанию. Его идемпотентность полностью зависит от типа применяемых изменений (операций), описанных в теле запроса.
Почему:
-
Неидемпотентные операции: Инкремент, добавление в массив. Повторение запроса изменяет результат.
PATCH /users/1 {"op": "increment", "path": "/age", "value": 1}Каждый вызов увеличит возраст на 1.
-
Идемпотентные операции: Установка конкретного значения, замена. Повторение запроса не меняет конечное состояние.
PATCH /users/1 {"op": "replace", "path": "/age", "value": 30}Многократный вызов установит возраст в 30, результат не изменится.
Best Practice: Для гарантированной идемпотентности используйте формат JSON Patch (RFC 6902) с операциями replace, set или remove для конкретных значений, либо применяйте метод PUT для полной замены ресурса.