组合密钥资源REST服务
|
我在工作中遇到了一个问题,在那里我找不到关于在主要密钥是其他资源ids的组合的资源上对RESTful Web服务执行CRUD操作的常规标准或做法的信息。我们使用MVC WebApi来创建控制器。例如,我们有三个表: >产品:PK = ProductId 产品可以有很多零件,零件可以是许多产品的组成部分。关联表还包含与协会本身相关的附加信息,而不是需要编辑。 我们有ProductsController和PartsController类,它们使用定义为{controller} / {id} / {action}的路由模板来处理通常的GET / PUT / POST / DELETE操作,以使以下IRI工作: > GET,POST / api / Products – 返回所有产品,创建新产品 我遇到麻烦的是如何定义ProductPartAssoc资源的路由模板。路由模板和IRI应该如何获取关联数据? > GET,POST / api / ProductPartAssoc – 返回所有关联,创建关联 我的同事发现这个审美感觉不好,似乎认为没有一个ProductPartAssocController类是更好的,而是添加附加的方法给ProductsController来管理关联数据: > GET,PUT,DELETE / api / Products / 1 / Parts / 2 – 获取产品1和部件2之间关联的数据,而不是第2部分的数据作为第1部分的成员,这通常是基于其他我在其他地方看到的例子,如/ Book / 5 / Chapter / 3。 一天结束时,我想我正在寻找的是验证,或指向我可以指出,并说“看,这是别人做的。” 处理由复合键确定的资源的典型做法是什么? 解决方法我也喜欢/ api / Products / 1 / Parts / 2的美学。您还可以使用多条路线进行相同的操作,因此您可以加倍,并提供/ api / Parts / 2 / Products / 1作为同一资源的备用URL。对于POST,您已经知道复合键。那么为什么不消除POST的需要,只需使用PUT来创建和更新?如果您的系统生成主键,则POST到集合资源URL非常好,但是如果您具有已知主键的组合,为什么需要POST? 也就是说,我也喜欢有一个单独的ProductPartAssocController包含这些URL的操作的想法。你必须做一个自定义的路线映射,但是如果你使用像AttributeRouting.NET这样很容易做的事情。 例如,我们这样做是为了管理角色中的用户: PUT,GET,DELETE /api/users/1/roles/2 PUT,DELETE /api/roles/2/users/1 6个URL,但只有3个操作,全部在GrantsController中(我们将用户和角色之间的gerund称为“Grant”)。类最终看起来像这样,使用AttributeRouting.NET: [RoutePrefix("api")]
[Authorize(Roles = RoleName.RoleGrantors)]
public class GrantsController : ApiController
{
[PUT("users/{userId}/roles/{roleId}",ActionPrecedence = 1)]
[PUT("roles/{roleId}/users/{userId}",ActionPrecedence = 2)]
public HttpResponseMessage PutInRole(int userId,int roleId)
{
...
}
[DELETE("users/{userId}/roles/{roleId}",ActionPrecedence = 1)]
[DELETE("roles/{roleId}/users/{userId}",ActionPrecedence = 2)]
public HttpResponseMessage DeleteFromRole(int userId,int roleId)
{
...
}
...etc
}
这对我来说似乎是一个相当直观的方法。将操作保持在单独的控制器中也使精简控制器成为可能。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-web-api – Web API / MVC 6中的安全JSON Web令牌
- asp.net – 是否可以使用Membership API更改用户名
- ASP.NET MVC Url路由支持(点)
- asp.net-mvc – 如何缓存FileContentResult的性能?
- asp.net-mvc – 如何降级Visual Studio 2012中的Entity Fra
- asp.net-mvc – asp.net mvc – 视图中的命名空间
- asp.net-mvc – ASP.NET MVC是否使用常规工具箱控件?
- asp.net-mvc – 应用程序级排队/网站流量管理
- asp.net – 如何增加IIS 7.0上的线程池线程
- asp.net-mvc – ASP.NET MVC术语让我沮丧 – 为什么’ViewM
- asp.net – Form .NET中的输入元素名称
- asp.net – 转义HTML实体并避免WebForm标签中的H
- 如何杀死会话或会话ID(ASP.NET/C)
- asp.net-web-api – 具有Web Api RC的Ninject In
- asp.net-mvc – 如何使用MVC 4上传大文件?
- asp.net-mvc – MVC SelectList不能正常工作
- asp.net-web-api – 尝试从asp.net web api自主主
- asp.net-mvc-3 – 任何好的样品开始使用Dapper?
- asp.net – aspx中__EVENTVALIDATION __VIEWSTAT
- ASP.NET:压缩ViewState
