Leo*_*rey 2 rest http restful-architecture
目前正在设计一个 REST API,并且不确定如何最好地处理提款操作,出于发布忽略安全性的目的,因为这已经得到处理。
当前用户资源有一个平衡连接,
GET https://api.example.com/user/1/balance
{"balance":10}
Run Code Online (Sandbox Code Playgroud)
将返还用户余额。
我可以想到两种方式从该余额中提取,要么在余额连接上删除,要么通过新连接提取,然后将金额发布到该连接。
DELETE实施 - 撤回 5 分
DELETE https://api.example.com/user/1/balance?amount=5
{"balance":5}
Run Code Online (Sandbox Code Playgroud)
POST实施 - 提现 5 分
POST https://api.example.com/user/1/withdraw
HTTP BODY: amount=5
{"balance":5}
Run Code Online (Sandbox Code Playgroud)
建议?
就我个人而言,我会在提款连接上使用POST,因为这将操作与数据分开,然后可以使用GET获取提款交易并使用DELETE取消。
另一种方法可能是在余额对象上创建交易连接,然后对其进行POST 。
POST https://api.example.com/user/1/balance/transactions
HTTP BODY: amount=-5
{"balance":5}
Run Code Online (Sandbox Code Playgroud)
这是一个更好的方法吗?然后,这将在余额资源上创建事务资源。
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"}
Run Code Online (Sandbox Code Playgroud)
查看此资源可能会有所帮助。
http://www.restapitutorial.com/lessons/httpmethods.html
归档时间: |
|
查看次数: |
1793 次 |
最近记录: |