Чем отличается результат пяти одинаковых запросов PUT от пяти одинаковых запросов POST?

«Чем отличается результат пяти одинаковых запросов PUT от пяти одинаковых запросов POST?» — вопрос из категории API тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Результаты будут принципиально разными из-за идемпотентности.

Метод Идемпотентность Результат 5 одинаковых запросов Пример (REST API)
PUT Да Состояние системы после первого и всех последующих запросов будет идентичным. Создастся или обновится один и тот же ресурс. PUT /api/users/123 с телом {"name": "Alice"} 5 раз → ресурс с ID 123 будет создан/обновлен один раз.
POST Нет Каждый запрос создаст новый ресурс. В системе появится 5 новых ресурсов (если нет логики предотвращения дубликатов). POST /api/users с телом {"name": "Alice"} 5 раз → будут созданы 5 пользователей с разными ID (напр., 124, 125, ...).

Ключевое объяснение:

  • PUT используется для создания или полного обновления ресурса по известному URI. Повторение запроса не меняет результат.
  • POST используется для создания нового ресурса, когда клиент не знает итоговый URI. Сервер каждый раз генерирует новый идентификатор.

Исключение: Если в POST-эндпоинте реализована проверка на дубликаты (например, по полю email), поведение может казаться идемпотентным, но с точки зрения HTTP-спецификации это не так.