Я начинаю новый проект, используя ASP.NET MVC4 и Visual Studio 2012. С точки зрения дизайна API, большинство примеров сосредоточены на основных операциях CRUD с помощью команд PUT, GET, POST и DELETE над сущностями (как и следовало ожидать). Я читал следующее:
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 для таких операций?
Любое понимание высоко ценится, как всегда.