Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
今回は、以前のブログポスト ASP.NET Web API を使ってみよう で紹介した ASP.NET Web API について、その URL ルーティングとアクション メソッドへのマッピングについてご紹介します。
◆ ルーティング
Web API プロジェクトのデフォルトでは、Global.asax.cs ファイルの RegisterRoutes メソッドで下記のようにルーティングが定義されています。
1: public static void RegisterRoutes(RouteCollection routes)
2: {
3: ...
4:
5: routes.MapHttpRoute(
6: name: "DefaultApi",
7: routeTemplate: "api/{controller}/{id}",
8: defaults: new { id = RouteParameter.Optional }
9: );
10:
11: ...
12:
13: }
このルーティングの定義により、Web API プロジェクト テンプレートで追加される ValuesController に対する各アクション メソッドの HTTP リクエストは、例えば id パラメータ “1” を付加した GET リクエストの場合 “ /api/values/1” の URI となります。
下記は、ValuesController の各アクション メソッドと HTTP メソッド、および URI の対応表です。
アクション |
HTTP メソッド |
相対 URI |
全てのデータのリストを取得する |
GET |
/api/values |
id で指定されたデータを取得する |
GET |
/api/values/id |
新しいデータを追加する |
POST |
/api/values |
id で指定されたデータを更新する |
PUT |
/api/values/id |
id で指定されたデータを削除する |
DELETE |
/api/values/id |
◆ アクション メソッドとのマッピング
上記のルーティングでは、アクション メソッドへのマッピングは明示的に指定されていません。それでは、どのようにしてアクション メソッドとのマッピングがおこなわれているのでしょうか。
Web API プロジェクト テンプレートで追加される ValuesController には、下記の通り GET, POST, PUT, DELETE の各 HTTP メソッドに対応したアクションが用意されています。
1: namespace ProductsAPI.Controllers
2: {
3: public class ValuesController : ApiController
4: {
5: // GET /api/values
6: public IEnumerable<string> Get()
7: {
8: return new string[] { "value1", "value2" };
9: }
10:
11: // GET /api/values/5
12: public string Get(int id)
13: {
14: return "value";
15: }
16:
17: // POST /api/values
18: public void Post(string value)
19: {
20: }
21:
22: // PUT /api/values/5
23: public void Put(int id, string value)
24: {
25: }
26:
27: // DELETE /api/values/5
28: public void Delete(int id)
29: {
30: }
31: }
32: }
この ValuesController の各アクション メソッドと HTTP メソッド(GET, POST, PUT, DELETE)との対応は、単純な命名規約のもとでマッピングされます。例えば、アクション メソッド名の開始文字列が “Get... ” で始まる場合、HTTP の GET メソッドのリクエストで実行されます。なお、Get アクション メソッドは int 型の引数 id をとるメソッドと引数なしのメソッドの 2 種類があり、同じ GET のリクエストでも URI に付加されるパラメータの有無によってマッピングされ、アクション メソッドが実行されます。
同様にして、HTTP POST のリクエストは “Post... ” で始まるアクション メソッドに、HTTP PUT のリクエストは “Put... ”、HTTP DELETE のリクエストは “Delete... ” にマッピングされます。
つまり、GET に対応するアクション メソッド名を変更して、例えば GetValue とか GetProduct などとしても OK です。
この命名規約により、各アクション メソッドに [HttpGet] や [HttpPost] などの HTTP メソッド属性を付加する必要がなくなっています(もちろん、この HTTP メソッド属性を使って、任意のアクション名を使用することも可能です)。
Web API では、上記のようなルーティングと命名規約による HTTP メソッドとアクションのマッピングによって、RESTful な CRUD (Create, Read, Update, Delete) 処理に対応した HTTP サービスを容易に実装することができます。