REST API-定义正确且直观的URI

时间:2015-01-08 16:49:00

标签: rest http

我想创建一个小注册应用程序,它将作为REST API发布。它将允许用户/系统在我的系统上创建一个帐户。他们将传递用户名和密码。 根据我读过的规则,URI中的“/”必须用于表示层次关系。

所以我想知道这种类型的URI是否遵循规则,并且足够直观:

 POST http://myregistrations.com/users/user/{user_id},{password}
 GET http://myregistrations.com/users/user/{user_id}
 PUT http://myregistrations.com/users/user/{user_id},{password}
 DELETE  http://myregistrations.com/users/user/{user_id}

还是应该从URI中删除“用户”部分?在这种情况下,如果我想获得“所有”用户,我可以执行以下操作:

 GET http://myregistrations.com/user/
 DELETE http://myregistrations.com/user/  ** i might not allow this but just for discussion purposes...

其余的方法看起来像这样:

 POST http://myregistrations.com/user/{user_id},{password}
 GET http://myregistrations.com/user/{user_id}
 PUT http://myregistrations.com/user/{user_id},{password}
 DELETE  http://myregistrations.com/user/{user_id}

我不想让事情复杂化......但我也想确保遵循惯例。 我倾向于第二个例子,我没有“用户”。鉴于URI的每个部分都应映射到可寻址资源,并且我不允许批量更新帐户,因此具有“用户”的概念在此时似乎无用。我可能会遗漏一些东西。

也许我只是在分裂头发。我一直在阅读其他关于定义REST API的帖子......但我还没有找到任何东西。

感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用单个API同时拥有这两个概念(用户和用户)。 URI /users/user对我来说似乎很复杂。

过度简化的示例:

发布一位用户:

POST /user/{user_id,password}

发布多个用户:

POST /user/[{user_id,password},{user_id,password}]

获取一位用户:

GET /user/{user_id}
Response: {user_name} or [{user_name}]

获取多个用户:

GET /user/{search_user_name}
Response: [{user_name},{user_name},{user_name}]

答案 1 :(得分:0)

在这种情况下,通常复数是如何引用资源users而不是user。这就是您遵循REST模式的路线。

 POST http://myregistrations.com/users/  --> The post payload should contain: {user_id},{password}
 GET http://myregistrations.com/users/{user_id}  --> The user_id is in the URL
 PUT http://myregistrations.com/users/{user_id}  --> The user_id is in the URL
 DELETE  http://myregistrations.com/users/{user_id} --> The user_id is in the url

答案 2 :(得分:0)

  

我不想让事情复杂化......

我有坏消息,你已经过于复杂的事情了。 REST客户端对URI结构一无所知,因为它们遵循用语义元数据注释的超链接。客户端检查此元数据而不是URI结构。