REST API 设计 - 提现余额动作

Posted

技术标签:

【中文标题】REST API 设计 - 提现余额动作【英文标题】:REST API design - Withdraw Balance action 【发布时间】:2013-02-14 12:06:10 【问题描述】:

目前正在设计一个 REST API 并且不确定如何最好地处理撤消操作,出于帖子的目的忽略安全性,因为这已经被处理了。

目前User资源有一个balance连接,

GET https://api.example.com/user/1/balance

"balance":10

将返回用户余额

我有 2 种方法可以从这个余额中退出,要么是在 余额 连接上的 DELETE,要么是一个新的连接 withdraw 和然后POST到这个连接的数量。

DELETE 实施 - 撤销 5 分

DELETE https://api.example.com/user/1/balance?amount=5

"balance":5

POST 实施 - 撤销 5 分

POST https://api.example.com/user/1/withdraw
HTTP BODY: amount=5

"balance":5

建议?

我个人会选择 withdraw 连接上的 POST,因为这会将操作与数据分开,然后可以获得 withdraw 交易使用 GET 并使用 DELETE 取消。

更新

另一种方法是在 balance 对象上创建 transactions 连接,然后 POST 到此。

POST https://api.example.com/user/1/balance/transactions
HTTP BODY: amount=-5

"balance":5

这会是更好的方法吗?然后,这将在 balance 资源上创建 transaction 资源。

【问题讨论】:

【参考方案1】:

DELETE 选项不是很好的选择,因为根据 http 语义,您不希望资源的连续 DELETE 请求可以被接受,我的意思是您希望资源只能被删除一次。

考虑到提现操作是非幂等的,这意味着对同一个资源的多个请求可以返回不同的响应,因为请求可以改变资源的状态(余额金额)。

对于这种类型的非幂等操作,通常使用 POST 方法,如下所示:

Request:

POST https://api.example.com/user/1/balance/transactions
HTTP BODY: type:withdraw, amount:5

Response:

200 OK "balance":"5"
401 Unauthorized "message":"insufficient funds"

看看这个有用的资源。

http://www.restapitutorial.com/lessons/httpmethods.html

【讨论】:

以上是关于REST API 设计 - 提现余额动作的主要内容,如果未能解决你的问题,请参考以下文章

是否有一个等效的 REST API 函数来获取 Paypal 帐户的余额,类似于 NVP 获取余额 API? [关闭]

Java Rest API - 返回帐户余额的方法[关闭]

RESTful Api 身份认证安全性设计

防止重复请求攻击

怎样更好的设计你的REST API之基于REST架构的Web Service设计及REST框架实现

REST API 安全设计指南