一个restful服务API设计问题
关于restful服务API设计的一个问题。我不知道怎样做才是正确的方法。请给我一些建议 我的情况是这样的。我有一个用户资源和权限资源一个restful服务API设计问题,rest,wcf-rest,restful-architecture,Rest,Wcf Rest,Restful Architecture,关于restful服务API设计的一个问题。我不知道怎样做才是正确的方法。请给我一些建议 我的情况是这样的。我有一个用户资源和权限资源 http://www.sample.com/rest/users http://www.sample.com/rest/permissions 用户可以拥有多个权限;一个权限可用于多个用户;这是一种多对多的关系 通常,我们可以说权限属于用户,因此我们有一个API,如: http://www.sample.com/rest/users/{userId}/perm
http://www.sample.com/rest/users
http://www.sample.com/rest/permissions
用户可以拥有多个权限;一个权限可用于多个用户;这是一种多对多的关系
通常,我们可以说权限属于用户,因此我们有一个API,如:
http://www.sample.com/rest/users/{userId}/permissions
当我们想要在权限和用户之间建立关系时,这里有两个选项
http://www.sample.com/rest/permissions
使用权限正文,然后发布:
http://www.sample.com/rest/users/{userId}/permissions
带有一个集合
权限ID的数量。我不确定是否还有其他RESTAPI
像这样设计http://www.sample.com/rest/users/{userId}/permissions
带有
权限对象内容。在这个方法中,我们做两件事
选项1中的描述。缺点是我们永远不能重复使用
已创建权限,看起来一个用户可以有多个
权限,但一个权限仅由一个用户使用,它遵守
我们的第一次设计。但它对用户来说非常简单如果您对此有任何经验,欢迎提供任何建议 如果权限对象足够复杂,看起来像一个单独的实体(或者需要在用户之间共享权限对象),我会使用单独的权限URL。如果权限“对象”只是一个
rwx
字符串或类似的东西,那么不值得引入独立实体。另一方面,如果权限对象更复杂(例如,与文件夹列表关联的权限列表),则将其存储为单独的实体并使用单独的URL可能是有意义的。如果权限对象足够复杂,看起来像单独的实体,我将使用单独的权限URL(或者如果您需要在用户之间共享权限对象)。如果权限“对象”只是rwx
字符串或类似的东西,则不值得引入独立实体。另一方面,如果权限对象更复杂(例如与文件夹列表相关联的权限列表),将其存储为单独的实体并使用单独的URL可能是有意义的。另一种方法是将用户和权限视为单独的“空间”或资源。您应该能够使用单独的URL单独管理它们
创建用户
- POST:/users/
- 返回:{userid}
- POST:/permissions/
- 返回:{permid}
- PUT:/permissions/users/{userId}/
- PUT:/permissions/用户/
- 正文:{[userid1,userid2,…]}
- PUT:/users/permissions/{permId}/
- PUT:/users/权限
- 正文:{[permid1,permid2,…]}
- POST:/users/
- 返回:{userid}
- POST:/permissions/
- 返回:{permid}
- PUT:/permissions/users/{userId}/
- PUT:/permissions/用户/
- 正文:{[userid1,userid2,…]}
- PUT:/users/permissions/{permId}/
- PUT:/users/权限
- 正文:{[permid1,permid2,…]}
和/users
这是一个很好的简单的开始,它们分别是所有用户和所有权限的集合/permissions
和/users/{id}
,它们分别是用户或权限的单个资源。/permissions/{id}
- 用户可能有“姓名”、“注册日期”、“id”等字段
- 权限可能包含“名称”、“创建日期”、“id”等字段
/users/{id}/name
可用于根据id仅返回用户名。您不必支持此行为,如果支持,则不应直接将用户名作为“user”资源的一部分返回(您应链接到此特定名称资源)
这个概念也可以应用于权限。因此,我们还添加了/users/{id}/permissions
,既可以将其作为一个资源调用GET
,也可以作为一个“链接”,它位于通过/users/{id}
获取的资源中(因此html的超链接部分开始被使用).那么这是什么回报呢?可能是这样的:
/permission/3
/permission/666
/permission/7
这些资源是否在用户的“下方”,否。它们是否需要,否。因此,如果您获取这些权限资源中的一个,该怎么办
name=admin
id=666
created-date=12/3/45
users=/permission/666/users
我们走了,有了那辆车
{ "name" : "Frank",
"permissions" : [
...
]
}