Как сохранить идемпотентность API при одновременном получении нескольких запросов с одинаковым идентификатором?

Из многих статей и коммерческих API, которые я видел, большинство людей делают свои API идемпотентными, прося клиента предоставить requestId или идемпотентный ключ (например,https://www.masteringmodernpayments.com/blog/idempotent-stripe-requests) и в основном хранит карту ответа requestId <-> в хранилище. Поэтому, если поступает запрос, который уже находится на этой карте, приложение просто вернет сохраненный ответ.

Это все хорошо для меня, но моя проблема в том, как мне справиться со случаем, когда поступает второй вызов, пока первый вызов еще выполняется?

Так вот мои вопросы

Я предполагаю, что идеальным поведением было бы, если бы второй вызов продолжал ждать, пока первый вызов не завершится и не ответит на первый вызов? Это как люди это делают?

если да, то как долго второй звонок должен ждать завершения первого звонка?

если второй вызов имеет ограничение по времени ожидания и первый вызов все еще не завершен, что он должен сказать клиенту? Должно ли оно просто не возвращать никаких ответов, чтобы клиент отключился и повторил попытку?

Ответы на вопрос(2)

Ваш ответ на вопрос