私は、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スタイルのアプローチです。そこから、各操作を分割するために、2 つのコントローラーを持つ 2 つのルートを推奨していると推測しました。
おそらく、親エンティティ 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 設計にアプローチする間違った方法ですか?
いつものようにどんな洞察も大歓迎です。