Ответ вслух Middle HTTP для тестировщика спрашивают часто обновлено

Идемпотентность и как её проверить

Вопрос

Что такое идемпотентность в HTTP и как бы ты проверил её на реальном API?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Идемпотентность значит, что N одинаковых запросов дают то же состояние сервера, что один. По стандарту идемпотентны GET, HEAD, PUT, DELETE, а POST нет.

Что должно прозвучать в ответе

  • Повтор запроса оставляет сервер в том же состоянии, что и один запрос

  • GET, PUT, DELETE идемпотентны по стандарту, POST нет, PATCH зависит от реализации

  • Ответ при повторе может отличаться (DELETE: 204, потом 404), важно состояние

  • Проверка: отправить запрос дважды и сравнить данные в БД или через GET

  • Для POST оплат и заказов: ключ идемпотентности (Idempotency-Key), повтор с тем же ключом не создаёт дубль

Что могут спросить следом

  • Почему PATCH может быть не идемпотентным?
  • Что сервер должен ответить на тот же ключ с другим телом?
  • Как сеть порождает повторы, если пользователь нажал один раз?

Разбор

Идемпотентность значит, что N одинаковых запросов дают то же состояние сервера, что один. По стандарту идемпотентны GET, HEAD, PUT, DELETE, а POST нет. PATCH зависит от тела: «поставь phone» идемпотентен, «увеличь счётчик на 1» нет. При этом ответ может отличаться: первый DELETE даёт 204, второй 404, но ресурс в обоих случаях удалён. Проверяю так: шлю запрос два раза подряд и смотрю не на ответ, а на данные, через GET или прямо в базе. Отдельно проверяю повторы POST, которые порождает сама сеть: таймаут клиента, ретрай в мобильном приложении, двойной клик. Для платежей нормальная защита это заголовок Idempotency-Key: тот же ключ возвращает тот же результат без второго списания, а тот же ключ с другим телом должен давать ошибку, например 422 или 409.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.