У нас есть конечная точка API, которая принимает людей.
Во время разговора мы проверяем, что PIN-код абонента еще не использовался, в этом случае мы отклоняем запрос с ошибкой ввода 422.
Недавно клиент пожаловался на дубликат PIN-кода, и мы обнаружили, что конечная точка API запускалась двумя разными вызовами REST с дублированными PIN-кодами, но без дублированного тела.
т.е.
{First Name: John, Last Name: Doe, PIN: 722}
{First Name: Jane, Last Name: Doe, PIN: 722}
Поскольку оба приходят в течение миллисекунд друг от друга, когда проверка выполняется для второй записи для дубликата ПИН-кода, он возвращает значение false, поскольку первая запись еще не была вставлена в БД, и в результате продолжает обрабатывать вторую запись. .
Мы рассмотрели несколько вариантов, таких как уникальные ограничения для БД, которые работают, но потребуют огромного количества переделок, чтобы вывести ошибку до ответа REST API. Огромный риск на процветающем производстве APP.
Существует около 5-6 различных вызовов API, которые могут модифицировать коллекцию PIN в том или ином виде, и около 20-30 различных API, где существует такая проблема (уникальные электронные письма, уникальное имя элемента и т. Д.), Поэтому я не уверен мы можем поддерживать списки для быстрого доступа.
Помимо ограничений БД, есть ли другие доступные нам опции, которые было бы проще реализовать? Возможно, какой-то неясный атрибут в классе .NET APIController.
По крайней мере, мне хотелось бы, чтобы запрос был сделан, а последующие запросы были поставлены в очередь. Я знаю, что мы можем просто сохранить полезную нагрузку для последующей обработки, однако, исходя из того, что API уже используются, это, похоже, не вариант, когда очередь должна блокировать ответ.
Попытка поиска в Google была далека от успеха, поскольку все предполагают, что я пытаюсь отклонить дубликаты полных тел.