我正在寻找REST API"干运行"操作的一些最佳实践.
假设我有一个端点,将资金从账户A转移到账户B.我可以像这样开始转账:
POST /transactions
{
"amount": 1000, // how much to transfer
"source": "A", // account to transfer from
"destination": "B" // account to transfer to
}
Run Code Online (Sandbox Code Playgroud)
此操作会创建一个"事务",因此响应将是一个事务对象,其有效负载包含:
{
"id": "txn-123",
"amount": 1000,
"source": "A",
"destination": "B",
"fees": 10, // any fees that were charged
"balance": 2500 // balance in source account AFTER transfer
}
Run Code Online (Sandbox Code Playgroud)
我希望能够在几个原因下进行干跑:
那么,"干跑"概念的最佳实践是什么?我可以想到几个选择:
这些是我对此事的看法,但我喜欢听别人的想法.
选项 3 显然是错误的。你会无缘无故地强迫客户做额外的工作。
在选项 1 和 2 之间进行选择取决于您的 API 的喜好和细节。目前尚不清楚/dry-run-transaction将 a视为一种独立的事物而不是交易的合理性。
如果您选择选项 2,请考虑将其/dry-run-transaction设为短期资源,或者根本不保留它。这样客户就可以通过 POST 来查看费用并节省存储空间。
如果您使用选项 1,我认为技术上最正确的选项是在有效负载中包含一个属性,例如execute: false. 这会将所有信息返回给客户端,并让他们对事务执行 PUTexecute: true以完全按原样提交它。这种方法的一个缺点是你将有一堆未执行的交易(永远?),因为人们会在看到结果后决定不执行它们。
我认为根本不涉及安全问题。如果您真的很担心,只需将execute: false选项 1 设为默认值即可。
另一种方法可能是使用端点/transactions和/transaction-results. 如果您发布到/transaction,您将执行交易并获得永久交易结果的 ID/结果。如果你 POST 到 /transaction-results,你会得到一个没有 id 的响应和交易的临时结果集。请注意,我已经考虑了整整 20 秒,因此可能存在我没有看到的明显问题。:-)
| 归档时间: |
|
| 查看次数: |
1449 次 |
| 最近记录: |