Web API操作

时间:2015-02-05 17:49:03

标签: .net asp.net-web-api

虽然不完全是RESTful,但我认为使用动作来执行更简单的数据操作更有意义。因此我采用了以下方案:

/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是正确的选项。我应该只返回项目列表吗?或者返回包含项目列表的客户端?

2 个答案:

答案 0 :(得分:3)

我相信最RESTful的方式是:

GET: /api/clients/5/projects

这将返回标识为5的客户的所有项目。

你也可以使用:

GET: /api/projects?clientId=5

如果调用者在请求客户端时可能会使用项目数据,则将其包含在结果中。否则,最好将它们作为单独的请求保留。

答案 1 :(得分:2)

你听说过OData吗?它扩展了基本的REST功能,并提供了标准化的查询格式。

例如:

  

按ID要求个人实体

     

以下请求将返回Person类型的单个实体   给予用户名“russellwhyte”

GET serviceRoot/People('russellwhyte')

http://www.odata.org/getting-started/basic-tutorial/

或者...

GET serviceRoot/Airports('KSFO')/Location/Address

在你的情况下,我或多或少会想到......

GET api/Clients('clientid')/Projects

正如user1620220所述 - Web API内置了对OData的支持: http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options