2014-10-17 72 views
0

据我所知,根据RESTful准则,每个url应该代表一个资源或一组资源,并且动作应该作为参数。RESTful:如何在同一个网址上执行不同的操作?

假设我们有一组资源命名为“用户”,我想注册一个多用户,
因此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>

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

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

编辑
我真的很感激@添的建议,现在我想我的问题是更通用:
如果有对资源的几个更新的动作,每个动作需要的参数不同的组合,我现在应该如何制定RESTful API?非常感谢。 :)

回答

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> 

我认为后者更好。

+0

谢谢!请查看我的编辑。 – dastan 2014-10-18 13:51:52

+0

如何解决这个问题取决于你用于后端的情况,但我认为这是一个完全不同的问题,应该有自己的问题:-) – 2014-10-18 13:56:28

+0

'你用于后端',你能解释一下吗?对不起,我不清楚你的意思。 – dastan 2014-10-18 15:01:32

相关问题