我需要获得属于特定部门的部门列表。根据REST基础知识,/dept/1
URL应该用于按ID获取特定部门,因此不能在此处使用。
然后我有以下选择:
/dept/division/1
看起来不像真正的REST。另外,我不知道如何在WebApi动作术语中实现它。
/dept?divId=1
看起来更RESTful。这将需要创建Get(int divId)
操作,但还有Get(int id)
用于检索单个部门且具有相同签名的操作。
/dept (with divId=1 in the body)
它足够RESTful吗?它会像#2中那样具有相同的签名问题但是......
请建议哪种方式更好。谢谢!
答案 0 :(得分:3)
我该怎么做
/divisions/1/depts
/divisions/1
获得ID为1的单一部门,后面的/depts
获得属于该特定部门的所有部门
这当然可以扩展到
/divisions/1/depts/234
获得第234分部的ID 234的部门。
没有必要以这种方式通过身体传递信息。
我使用复数作为资源名称,因为我曾经这样做过,如果你想使用division
和dept
,那就没关系。
答案 1 :(得分:2)
public class DivisionsController : ApiController
{
[Route("/Divisions/{id}")]
[HttpGet]
public Division GetDivision(int id)
{
return // your code here
}
[Route("/Divisions/{id}/Dept")]
[HttpGet]
public IEnumerable<Department> GetDepartments(int id)
{
return // your code here
}
[Route("/Divisions/{id}/Dept/{deptId}")]
[HttpGet]
public Department GetDepartment(int id, int deptId)
{
return // your code here
}
}
或者以更简洁的方式
[RoutePrefix("/divisions/{id}")]
public class DivisionsController : ApiController
{
[Route]
[HttpGet]
public Division GetDivision(int id)
{
return // your code here
}
[Route("Dept")]
[HttpGet]
public IEnumerable<Department> GetDepartments(int id)
{
return // your code here
}
[Route("Dept/{deptId}")]
[HttpGet]
public Department GetDepartment(int id, int deptId)
{
return // your code here
}
}