私は ASP.NET Web API についてかなり多くの調査を行ってきました。RESTful な動詞ベースのアプローチと、ASP.NET MVC のような従来の RPC アプローチを一緒に使用しています。私は最もきちんとしたアプローチが何であるか疑問に思っています。これまでのところ、うまくいくものを 2 つ見つけましたが、最善の行動方針が何であるかはわかりません。
根拠
GET、POST、および PUT に完全に適合する主要なリソースであるPatientがあります。ただし、複数のアクションを持つコントローラーがあり、動詞ベースのアクションに実際に適合するものはなく、多くの場合、ルートベースの制約を実装できる引数を持たない複数のアクションがあるシナリオもあります (例: https: //stackoverflow.com/a/14350711/1061602 ) の場合。
アプローチ1
複数のルート、異なるルート名、同じルートテンプレート
WebApiConfig ルート:
config.Routes.MapHttpRoute(
name: "RestApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "RpcApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
参照: https://stackoverflow.com/a/12367487/1061602
欠点は、各アクションに属性を追加する必要があることActionName
です。そうしないと機能しません (??):
[ActionName("RestApi")]
public object Get(string id)
{
...
}
[ActionName("RpcApi")]
public void Foo()
{
...
}
アプローチ 2
複数のルート、同じルート名、異なるルートテンプレート
WebApiConfig ルート:
config.Routes.MapHttpRoute(
name: "RestApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "RpcApi",
routeTemplate: "rpc/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
参照: http://encosia.com/rest-vs-rpc-in-asp-net-web-api-who-cares-it-does-both/
欠点は、クライアントで事実上 2 つの URL が使用されることです。1 つは RESTful アクション用、もう 1 つは RPC アクション用です。
他のアプローチ??
??
これを達成するためのよりエレガントな方法はありますか?