我想创建一个小注册应用程序,它将作为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的帖子......但我还没有找到任何东西。
感谢。
答案 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结构。