gpt4 book ai didi

http - REST API 设计 - 提取余额操作

转载 作者:可可西里 更新时间:2023-11-01 17:11:01 26 4
gpt4 key购买 nike

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

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

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

{"balance":10}

将返回用户余额

我有两种方法可以从这个余额中取款,DELETE balance 连接或新连接 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 资源。

最佳答案

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

关于http - REST API 设计 - 提取余额操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14874489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com