我正在使用 ASP.NET MVC4 和 Visual Studio 2012 开始一个新项目。就 API 设计而言,大多数示例都侧重于通过实体上的 PUT、GET、POST 和 DELETE 动词进行的基本 CRUD 操作(如您所料)。我正在阅读以下内容:
http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
文章建议,如果我选择将路线映射为
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}/{action}",
defaults: new { action = RouteParameter.Optional }
);
这更像是一种 RPC 风格的方法;我从中推断他们推荐了两条带有两个控制器的路线来拆分每个操作:
可能类似于父实体 CRUD:
routes.MapHttpRoute(
name: "Parent",
routeTemplate: "api/{controller}/{id}/{action}",
defaults: new { id = RouteParameter.Optional }
);
对于子实体 CRUD:
routes.MapHttpRoute(
name: "Child",
routeTemplate: "api/user/{id}/{controller}",
defaults: new { id = RouteParameter.Optional }
);
从数据/粗略的角度来看,这完全有道理。但是,当您想要对实体(即,/User/NoahBawdy/SignIn
或/User/NoahBawdy/ChangePassword
)执行非粗略操作时怎么办?我可以看到这些是 PUT 或 POST 操作,但它真的需要它自己的控制器吗?这是为这些类型的操作处理 API 设计的错误方法吗?
任何见解一如既往地受到高度赞赏。