Идемпотентный ключ в Node.js API - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть конечная точка API REST в node.js, которая обрабатывает денежные транзакции. Я хочу реализовать нечто подобное ключу идемпотентности полосы, чтобы гарантировать, что одна и та же транзакция не будет выполнена дважды в случае сбоя сети. Как я могу реализовать что-то подобное в Node.js?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

Вы хотите, чтобы каждая клиентская транзакция генерировала UID, который она отправляет вместе с запросом. Затем, если клиент попал в какой-либо сценарий повторения, пока он остается с тем же UID, ваш сервер может обнаружить запрос, который является дубликатом того, что он уже видел.

Существует множество способы создания этого типа UID. Вы можете буквально зачеркнуть время Date.now(), а затем добавить случайный набор цифр из Math.random() в конец. Это дает вам элемент времени плюс случайный элемент, который дает вам хорошую уникальную строку токена.

Существуют также некоторые стандарты в отношении этих типов строк UID. Вы можете прочитать различные ответы здесь: Создайте GUID / UUID в JavaScript? для некоторых библиотек, а для некоторых создайте свои собственные решения, следующие RF C 4122 .

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

0 голосов
/ 16 февраля 2020

В вашем случае, поскольку вызов не идемпотентен, вы можете позвонить только один раз. В случае сбоя лучше всего обращаться напрямую как человек, чтобы проверить статус транзакции и вручную исправить его.

Для идентификации используйте uuid для каждого вызова. Вы можете создать его на стороне клиента или на стороне сервера. На стороне сервера рекомендуется, но ответ может никогда не дойти до клиента, поэтому у них не будет идентификатора. Другой вариант - сгенерировать его на стороне клиента и принять в качестве параметра на стороне сервера. Это подразумевает меньшее доверие к этим идентификаторам, но все же полезно для более легкой идентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...