我不确定基于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
- 如果有人知道一个很好的例子那就太棒了。
非常感谢
答案 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}}。