Asp.NET WebApi基于约定的Url / Route查询方法

时间:2013-02-08 13:33:27

标签: asp.net-web-api

我不确定基于asp.net webapi约定的休息服务的“最佳实践”方法,该服务需要返回资源的“子属性”。

例如:

UsersController

public User Get(int id) { ... } //returns named user via /api/v1/Users/23

但是如果我想要返回给定的用户角色集合,我想我想要一个/api/v1/Users/23/Roles

的网址

如果您使用我的api,您会认为这是可以接受的吗?

如果可以接受,我的routeTemplate和方法签名会是什么样的(抱歉,如果这很明显 - 我今天真的很困惑)

我能找到的所有web api示例都太简单了,只使用DELETE,PUT,POST和两个GET - 似乎没有任何东西像子属性(如上所述)或部分响应 /api/v1/Users/23?fields=id,name - 如果有人知道一个很好的例子那就太棒了。

非常感谢

1 个答案:

答案 0 :(得分:2)

<强>角色

角色看起来是一个非常明智的子资源。

假设您希望使用http谓词列出并删除用户的角色...那么您可以使用两个控制器,一个用于用户,另一个用于角色。您的路线将如此:

config.Routes.MapHttpRoute(
            name: "UserApi",
            routeTemplate: "api/v1/Users/{userId}/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/v1/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

您的角色控制器将具有以下方法:

public class RolesController : ApiController
{
    // GET api/v1/users/1/roles
    public IEnumerable<Role> Get(int userId)
    {
        //
    }

    // GET api/v1/users/1/roles/1
    public IEnumerable<Role> Get(int userId, int id)
    {
        //
    }

}

角色作为用户的部分回复

请求使用的格式和标准:

apigee在他们的网站上做免费的电子书,他们对现有的API进行设计推荐和观察。

他们描述了来自LinkedIn,Facebook和Google的部分回复示例。它包含在他们的一个博客here和他们的书here中。

如何使用WebApi ASP.NET

假设使用JSON作为内容类型,那么在ASP.NET Web API partial response Json serialization之前就会提出类似的问题,简而言之,您需要将“?Fields =”之类的查询参数传递给自定义{ {1}}。