Код Senior Кеш и очереди спрашивают часто обновлено
Идемпотентный обработчик по Idempotency-Key
Условие
Платёжный API принимает заголовок Idempotency-Key. Напиши createIdempotent(handler): возвращает async (key, body) => response.
- Первый запрос с ключом вызывает
handler(body)и запоминает ответ. - Повтор с тем же ключом и тем же телом возвращает сохранённый ответ,
handlerне вызывается. - Повтор с тем же ключом, но другим телом бросает ошибку с
status = 422. - Если первый запрос с этим ключом ещё выполняется, параллельный повтор бросает ошибку с
status = 409. - Если
handlerупал, ключ не запоминается: клиент может повторить.
Тела сравнивай через JSON.stringify (в задаче тела это простые объекты с одинаковым порядком ключей).
Что проверяют тесты
повтор отдаёт сохранённый ответ
другие ключи обрабатываются отдельно
тот же ключ с другим телом: 422
параллельный повтор: 409
после ошибки можно повторить
Как подойти
Подсказки: 2
- Храни по ключу отпечаток тела, состояние (
pending/done) и ответ. - Запись
pendingставится доawait handler, иначе параллельный повтор её не увидит.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Батчинг запросов как в DataLoader
Следующий вопрос
Очередь задач с ретраями и dead letter