Может ли POST быть идемпотентным

«Может ли POST быть идемпотентным» — вопрос из категории Сети, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, POST по спецификации HTTP не является идемпотентным. Идемпотентность означает, что многократное выполнение одного и того же запроса даст тот же результат, что и однократное. POST же предназначен для создания ресурсов, и каждый его вызов обычно приводит к созданию нового объекта.

Пример:

// Этот POST-запрос создаст новый заказ
// Повторный вызов создаст ещё один заказ с другим ID
$response = $http->post('/orders', ['product_id' => 123]);

Хотя технически можно сделать POST идемпотентным (например, проверяя дубли перед созданием), это противоречит семантике HTTP. Для идемпотентных операций лучше использовать PUT (обновление) или GET (чтение).