何时知道何时应将参数放入体内?

时间:2018-02-22 07:24:24

标签: rest

在考虑rest的同时,我正在考虑对我的api提出最合乎逻辑的请求,但我无法理解这三个选择中哪一个是正确的:什么是最好的设计对于请求,假设我要从触发请求的某个用户10发送user2

1)

POST /pay
body: {"username": "user2", "amount": 10}

2)

POST /pay/users/user2
body: {"amount": 10}

3)

POST /pay/users/user2/10

我不知道网址中应该包含多少信息,而不知道网址中应包含多少信息。

2 个答案:

答案 0 :(得分:3)

假设您有许多用户和一些用户可以执行的功能。

所以你的api可能就像:

GET    /users                                        # get user list
POST   /users + {"name": "John"}                     # create user 
DELETE /users/{userId}                               # remove user
GET    /users/{userId}                               # get user by id

GET    /users/{userId}/payments                      # get users payments
POST   /users/{userId}/payments +  {"amount": 10}    # submit new payment

GET    /users/{userId}/payments/{paymentId}          # get users payment details

正如您所看到的,它是一个非常简单的资源树。

答案 1 :(得分:1)

我建议您查看restful-api-guidelines

您希望在URL中添加Canonical Identifier以及正文中的任何其他数据。 对于POST(用于创建新资源),Canonical Identifier通常尚不存在,因此它不需要。 然后,服务器创建一个并将其返回到位置标题中的客户端。

如果您要更新而不是插入,则应使用PUT或PATCH。如果用户名是您的标识符,则应使用选项2。标识符通常不可编辑。

由于您“添加”了新的付款,我建议您使用选项1.但我会将其称为付款,并可能会添加有关付款的更多信息。