Como manter um idempotente da API ao receber várias solicitações com o mesmo id ao mesmo tempo?

Em muitos artigos e API comercial que vi, a maioria das pessoas torna suas APIs idempotentes pedindo ao cliente que forneça uma requestId ou idempotent-key (por exemplo,https://www.masteringmodernpayments.com/blog/idempotent-stripe-requests) e basicamente armazena o mapa de resposta requestId <-> no armazenamento. Portanto, se houver uma solicitação que já esteja nesse mapa, o aplicativo retornará a resposta armazenada.

Tudo isso é bom para mim, mas o meu problema é como lidar com o caso em que a segunda chamada entra enquanto a primeira ainda está em andamento?

Então aqui estão minhas perguntas

Eu acho que o comportamento ideal seria a segunda chamada continuar esperando até a primeira chamada terminar e retornar a resposta da primeira chamada? É assim que as pessoas fazem isso?

em caso afirmativo, quanto tempo a segunda chamada deve aguardar o término da primeira chamada?

se a segunda chamada tiver um tempo de espera e a primeira ainda não terminar, o que deve ser dito ao cliente? Ele simplesmente não deve retornar nenhuma resposta para que o cliente atinja o tempo limite e tente novamente?

questionAnswers(2)

yourAnswerToTheQuestion