尽管不完全是RESTful,但我认为使用操作更有意义,因为您在做的事情在概念上涉及更多,而不仅仅是操作简单数据。因此,我已经采用了以下方案:Web API操作
/api/projects/ = Returns all projects
/api/projects/{id} = Returns single project
/api/projects/{id}/{action} [POST]
Applies action on a project, such as "Activate"
/api/projects/{action} [GET]
Gets projects which meet the condition of the action, such
as all projects which are "Active"
但是......提供了一种方式来获得项目的客户不是那么清楚,我倾向于选择2 ...
1. /api/projects/GetByClient [POST, Client Id in body]
But now it has to be a POST, when we're only getting a resultset...
2. /api/clients/{clientid}/GetProjects
But now we're returning projects from a clients controller
3. /api/ProjectGetterForClient/{client}
But will result in a large number of URLs for a complex project
我应该如何使这种API可用?
如果#2是正确的选项。我应该只返回项目清单吗?或者返回包含项目列表的客户端?
您对最后说“如果您可能使用项目数据...”的评论似乎指的是将“/ api/clients/5”作为始终返回项目数据(即使未明确要求)。我在问题结尾处问的是,在使用/ api/clients/5/projects时,这些项目是否应该包装在客户端对象中?这样,客户端控制器仍然只是返回客户端...我想不是,就好像您调用该url,您可能已经拥有客户端对象的数据。只需寻找确认... – Lee 2015-02-06 09:16:13
如果我调用了'/ api/clients/5/projects',那么我会期望结果中的根对象是项目,而不是客户端。实际上,您可以向您的项目控制器请求这样的路由,您只需在默认的'api/{controller}/{id}'之前定义路由。 – user1620220 2015-02-06 13:17:13
这正是我所做的 - 感谢您的帮助:) – Lee 2015-02-06 21:17:48