幂等键 Node.js API
Idempotence Key in Node.js API
我在 node.js 中有一个处理货币交易的 REST API 端点。我想实现类似于 stripe 的幂等键的东西,以确保在发生网络故障时不会执行两次相同的事务。
我怎样才能在 Node.js 中实现类似的东西?
在你的例子中,由于调用是非幂等的,你只能调用一次。如果失败,最好直接联系人工来检查交易状态并手动修复它。
为了识别,每次调用都使用 uuid。您可以在客户端或服务器端生成它。建议在服务器端,但响应可能永远不会到达客户端,因此他们不会有 id。另一种选择是在客户端生成它并在服务器端接受它作为参数。这意味着对这些 ID 的信任度较低,但仍然有助于更轻松地识别。
您将希望每个客户端事务生成一个随请求一起发送的 UID。然后,如果客户端进入任何类型的重试场景,只要它保持相同的 UID,您的服务器就可以检测到与它已经看到的请求重复的请求。
有很多方法可以生成这种类型的 UID。您实际上可以将 Date.now()
时间字符串化,然后将 Math.random()
中的一组随机数字添加到末尾。这给你时间元素加上一个随机元素,它给你一个很好的唯一标记字符串。
对于这些类型的 UID 字符串也有一些标准。您可以在此处阅读各种答案:Create GUID / UUID in JavaScript? for both some libraries and some create your own solutions that follow RFC 4122.
然后,您的服务器需要跟踪一组传入的 UID 令牌,以便它可以检测是否有针对已处理令牌的请求到达。
如果您使用的是 nodeJS,则使用
安装
npm install uuid
创建一个UUID(ES6模块语法)
import { v4 as uuidv4 } from 'uuid';
uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
或使用 CommonJS 语法:
const { v4: uuidv4 } = require('uuid');
uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
我在 node.js 中有一个处理货币交易的 REST API 端点。我想实现类似于 stripe 的幂等键的东西,以确保在发生网络故障时不会执行两次相同的事务。 我怎样才能在 Node.js 中实现类似的东西?
在你的例子中,由于调用是非幂等的,你只能调用一次。如果失败,最好直接联系人工来检查交易状态并手动修复它。
为了识别,每次调用都使用 uuid。您可以在客户端或服务器端生成它。建议在服务器端,但响应可能永远不会到达客户端,因此他们不会有 id。另一种选择是在客户端生成它并在服务器端接受它作为参数。这意味着对这些 ID 的信任度较低,但仍然有助于更轻松地识别。
您将希望每个客户端事务生成一个随请求一起发送的 UID。然后,如果客户端进入任何类型的重试场景,只要它保持相同的 UID,您的服务器就可以检测到与它已经看到的请求重复的请求。
有很多方法可以生成这种类型的 UID。您实际上可以将 Date.now()
时间字符串化,然后将 Math.random()
中的一组随机数字添加到末尾。这给你时间元素加上一个随机元素,它给你一个很好的唯一标记字符串。
对于这些类型的 UID 字符串也有一些标准。您可以在此处阅读各种答案:Create GUID / UUID in JavaScript? for both some libraries and some create your own solutions that follow RFC 4122.
然后,您的服务器需要跟踪一组传入的 UID 令牌,以便它可以检测是否有针对已处理令牌的请求到达。
如果您使用的是 nodeJS,则使用
安装
npm install uuid
创建一个UUID(ES6模块语法)
import { v4 as uuidv4 } from 'uuid';
uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
或使用 CommonJS 语法:
const { v4: uuidv4 } = require('uuid');
uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'