2

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

当前用户资源有一个余额连接,

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

{"balance":10}

将返回用户余额

有 2 种方法我能想到从这个余额中提取,要么在余额连接上删除,要么新连接提取,然后将金额发布到此连接。

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取消交易。

更新

另一种方法是在balance对象上创建一个交易连接,然后POST到这个。

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

{"balance":5}

这会是更好的方法吗?然后,这将在余额资源上创建事务资源。

4

1 回答 1

4

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

于 2013-02-14T17:34:44.923 回答