Идемпотентность — свойство операции давать одинаковый результат при одном или множественных выполнениях. В HTTP: GET/PUT/DELETE идемпотентны по RFC (повторный запрос не меняет state). POST не идемпотентен по умолчанию, но можно сделать таким через Idempotency-Key header (Stripe-паттерн). Критично для платежей, заказов, любых "create" endpoints где сетевой retry не должен создать дубликаты.
Ниже: подробности, пример, смежные термины, FAQ.
POST /v1/payments
Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000
{"amount":100,"currency":"RUB"}Сетевой retry: сервер принял POST, обработал, но ответ потерялся в пути. Клиент думает "не прошло, повторю" → дубль. Idempotency-Key защищает от этого.
Stripe хранит 24 часа. Этого достаточно для retry-окна и не раздувает DB.
Да. Rate limit ≠ не-идемпотентность. Запрос либо разрешается и возвращает данные, либо отбивается с 429 — в обоих случаях state не меняется.