据我所知,根据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?非常感谢。 :)
答案 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>
我认为后者更好。