首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REST设计-撤回平衡操作

REST设计-撤回平衡操作
EN

Stack Overflow用户
提问于 2013-02-14 12:06:10
回答 1查看 1.6K关注 0票数 2

目前正在设计REST,并且不确定如何最好地处理退出操作,因此post忽略了安全性,因为这已经被处理了。

当前,用户资源具有balance连接,

代码语言:javascript
复制
GET https://api.example.com/user/1/balance

{"balance":10}

将返回用户balance

我可以考虑从这个余额中提取两个方法,要么是 balance 连接上的删除,要么是一个新的连接 DELETE ,然后将金额发到这个连接上。

删除执行-撤回5点

代码语言:javascript
复制
DELETE https://api.example.com/user/1/balance?amount=5

{"balance":5}

实施后-撤回5分

代码语言:javascript
复制
POST https://api.example.com/user/1/withdraw
HTTP BODY: amount=5

{"balance":5}

有什么建议吗?

就我个人而言,我会在撤回连接上发表文章,因为这样可以将操作从数据中分离出来,然后可以使用GET获取撤回事务,然后用DELETE取消事务。

更新

另一种方法可以是在balance对象上创建一个连接,然后发布到此对象。

代码语言:javascript
复制
POST https://api.example.com/user/1/balance/transactions
HTTP BODY: amount=-5

{"balance":5}

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

EN

回答 1

Stack Overflow用户

发布于 2013-02-14 17:34:44

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

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

对于这种非幂等运算,通常使用POST方法,如下所示:

代码语言:javascript
复制
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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14874489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档