2

私は、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 設計にアプローチする間違った方法ですか?

いつものようにどんな洞察も大歓迎です。

4

1 に答える 1

3

あなたはあなたの投稿でいくつかの興味深い点を挙げました。私が取り組んでいるプロジェクトで同様の課題に直面しました。私のアプローチは、ルーティング構成にアクション パラメーターを追加することです。

その変更により、コントローラーに任意のメソッドを追加して、クライアントから呼び出すことができました。これにより、概念的には同じコントローラーに属するメソッドに対して複数のコントローラーを指定する必要がなくなります。

オマール

于 2012-07-10T18:12:00.510 に答える