小编Mit*_*lik的帖子

组合密钥资源REST服务

我在工作中遇到了一个问题,我无法找到有关在RESTful Web服务中针对主键是其他资源ID的组合的资源执行CRUD操作的通常标准或实践的信息.我们使用MVC WebApi来创建控制器.例如,我们有三个表:

  • Product:PK = ProductId
  • Part:PK = PartId
  • ProductPartAssoc:PK =(ProductId,PartId)

产品可以包含许多部件,而部件可以是许多产品的组件.关联表还包含与关联本身相关的其他信息,而不是可编辑的信息.

我们有ProductsControllerPartsController类使用定义为的路由模板处理通常的GET/PUT/POST/DELETE操作:{controller}/{id}/{action}以便以下IRI工作:

  • GET,POST /api/Products- 返回所有产品,创建新产品
  • GET,PUT,DELETE /api/Products/1- 检索/更新/删除产品1
  • GET,POST /api/Parts- 返回所有部件,创建一个新部件
  • GET,PUT,DELETE /api/Parts/2- 检索/更新/删除第2部分
  • 获取 /api/Products/1/Parts- 获取产品1的所有部件
  • 获取 /api/Parts/2/Products- 获取第2部分为组件的所有产品

我遇到问题的方法是如何为ProductPartAssoc资源定义路径模板.获取关联数据的路由模板和IRI应该是什么样的?坚持惯例,我希望如下:

  • GET,POST /api/ProductPartAssoc- 返回所有关联,创建关联
  • GET,PUT,DELETE /api/ProductPartAssoc/[1,2]- 检索/更新/删除产品1和第2部分之间的关​​联

我的同事发现这在美学上令人不悦,并且似乎认为最好不要有一个ProductPartAssocController类,而是添加其他方法ProductsController来管理关联数据:

  • GET,PUT,DELETE /api/Products/1/Parts/2- 获取产品1和第2部分之间关联的数据,而不是第2部分作为第1部分成员的数据,这通常是基于其他示例的情况,例如/Book/5/Chapter/3我在其他地方看到的情况.
  • POST没有任何线索,他们期望IRI看起来像什么.不幸的是,他们是决策者.

在一天结束时,我想我要求的是验证,或者我可以指出的方向,并说"看,这是其他人做的."

处理复合键识别的资源的典型做法是什么?

rest composite-key asp.net-web-api attributerouting asp.net-web-api-routing

23
推荐指数
1
解决办法
8764
查看次数