【发布时间】:2016-03-19 16:00:09
【问题描述】:
我正在设计一个 RESTful Web API 并且遇到了以下问题:我需要一个控制器来检索层次结构的集合(称为部分)以及检索单个部分(单个部分)。如果我需要一个集合,我必须参考根部分的 ID,它为我提供了整个结构的子树。所以我继续定义了一个像这样的 SectionsController:
public class SectionsController : ApiController
{
// GET api/sections/5
// Gets a subtree.
public IEnumerable<Section> Get(int rootId)
{
...
}
// GET api/sections/5
// Gets a single section.
public Section Get(int sectionId)
{
...
}
这显然不起作用,因为签名是相同的。推荐的解决方法是什么?
【问题讨论】:
-
把它们放在不同的控制器中,或者给它们更具体的名字。如
GetSectionsWithRoot -
我想过把它们放在不同的控制器中。至于第二个建议,那不会违反 REST 吗?我想以 api/sections (GET) 和 api/sections/5 (GET) 的形式结束 URI,所以我猜 api/subsections/5 会很好。不确定 GetSectionsWithRoot 会导致什么结果。
-
我想它确实违反了 REST,但并非所有 API 都严格遵守 REST 准则 :)。无论如何,你可以写
/api/hierarchy/5。编辑;或者是的,/subsections/ 也有效
标签: c# rest asp.net-web-api