RESTful:如何在同一个URL上执行不同的操作?

时间:2014-10-17 11:14:19

标签: rest

据我所知,根据RESTful准则,每个url应该代表一个资源或一组资源,并且应该将操作作为参数。

假设我们有一组名为'users'的资源,我想再注册一个用户,
所以api可能是:

POST /users HTTP/1.1
Host: www.example.com

username=<username>&password=<password>&email=<email>&age=<age>

现在,如果我要取消注册用户,那么取消注册api:

方法仍为POST
URI仍为/users
参数可以是username=<username>&password=<password>&reason=<reason>

在这种情况下,两个api使用不同的参数共享相同的url和方法,我认为这不是一个好的设计。

所以问题是:
针对这种情况的优秀设计是什么,使服务器端更容易区分同一资源上的两个不同操作?

修改
我非常感谢@Tim的建议,现在我希望我的问题更通用:
如果资源上有多个不同的更新操作,并且每个操作都采用不同的参数组合,那么我现在应该如何计算RESTful apis?非常感谢。 :)

1 个答案:

答案 0 :(得分:2)

如果您通过发出POST(创建)请求来注册用户,则相反的 - 取消注册 - 应该是DELETE请求。

<强>注册

POST /users HTTP/1.1
Host: www.example.com

username=<username>&password=<password>&email=<email>&age=<age>

<强>注销
您可以选择使用请求正文中的用户名和密码(用于验证)向/users发出请求

DELETE /users HTTP/1.1
Host: www.example.com

username=<username>&password=<password>&reason=<reason>

或者使用密码(用于验证)和请求正文中的原因(出于任何目的)向/users/<username>发出请求

DELETE /users/<username> HTTP/1.1
Host: www.example.com

&password=<password>&reason=<reason>

我认为后者更好。