Идемпотентность
Как сделать повтор безопасным.
Как это работает
Отправляйте Idempotency-Key в POST /emails, POST /emails/batch или POST /templates/{id}/send. Ни один другой маршрут его не читает. Первый вызов выполняет работу, а повтор с тем же ключом возвращает то же самое сообщение. POST /emails дополнительно выставляет Idempotency-Replayed: true, пакет сообщает replayed по каждому элементу, а отправка по шаблону сообщает об этом в теле и отвечает 200 вместо 202. Заявка на ключ делается самой вставкой в базу данных, поэтому два запроса, гонящиеся с одним ключом, не могут выиграть оба.
Idempotency-Key: invoice-8812Повторное использование ключа с другим телом даёт 422 idempotency_key_reuse, а не тихое воспроизведение. Почти всегда это означает, что ключ был выведен из чего-то недостаточно уникального, а воспроизвести кому-то сообщение, которого он не отправлял, хуже, чем отказать.
В пакете ключ расширяется по каждому элементу, поэтому один ключ на сотне сообщений не схлопывает их в первое.