REST API设计 - 提取余额操作

时间:2013-02-14 12:06:11

标签: http rest restful-architecture

目前正在设计一个REST API并且不确定如何最好地解决撤销行动,为了帖子的目的忽略安全性,因为这已经处理完毕。

目前用户资源具有余额连接,

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

{"balance":10}

会返回用户余额

我可以想到两种方式退出此余额,余额连接上的 DELETE 或新连接撤销,然后 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}

建议?

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

更新

另一种方法可能是在余额对象上创建交易连接,然后 POST 到此。

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

{"balance":5}

这会是一个更好的方法吗?然后,这会在余额资源上创建交易资源。

1 个答案:

答案 0 :(得分:2)

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