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