SC-014
小野 修司
どっとねっとふぁん
 http://blogonos.wordpress.com/
MSMVP 10年連続受賞
 Microsoft MVP for ASP.NET/IIS
 (April 2007 – March 2013)
 Microsoft MVP for Visual C#
 (April 2003 – March 2007)

業務はWeb系の開発がメイン
遠距離通勤
ASP.NET MVC 4 Beta の一部として提供
RESTful な Web サービスを提供
 データを表す URI に対して HTTP のメソッドで操作を行う

Visual Studio のテンプレートが提供されている
  Visual Studio 2010/.NET 4 用(go-live ライセンス)
  Visual Studio 11/.NET 4.5 用

ソースコードが Apache 2.0 ライセンスで提供されている
多様なデバイスに
リーチ
端末の形態
 デスクトップ
 スレート
 モバイル

アプリケーションの形態
 HTMLアプリケーション
 ネイティブアプリケーション
WCF Data Services
データベースをそのまま Web サービスとして公開するのが容易

WCF RIA Services
Silverlight アプリケーションとの連携が容易

WCF Web HTTP プログラミング モデル
WebServiceHost を利用し、サービスコントラクトを定義/実装して公開
柔軟なプログラミングモデル
ルーティング
“設定より規約” によるアクションメソッド呼び出し
POCO による Model 定義に対応
クエリーパラメーターによるページング/ソーティング/フィルタ対応
属性と Model バインディングによる検証
カスタムフィルターによる処理の拡張

適切なHTTPステータスの返却
HttpStateCode の利用
routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/{controller}/{id}",
     defaults: new { id = RouteParameter.Optional }
 );


“api/{controller}/{action}/{id}” と action をURLに含める設定も可能
この場合 RESTful とはいえなくなる
データの一覧
Getで始まる引数なしのメソッド
[HttpGet] を付加した引数なしのメソッド

特定データの取得
Getで始まる引数をとるメソッド
[HttpGet] を付加した引数をとるメソッド
データの追加
Postで始まるメソッド
[HttpPost] を付加したメソッド

データの更新
Putで始まるメソッド
[HttpPut] を付加したメソッド

データの削除
Deleteで始まるメソッド
[HttpDelete] を付加したメソッド
POCO による Model 定義
 public class Contact
 {
     public int ID { get; set; }


     [Required(ErrorMessage = "名前を入力してください")]
     public string Name { get; set; }


     [Required(ErrorMessage = "メールアドレスを入力してください")]
     public string Mail { get; set; }
 }
$filter
SQL 文の Where 句に相当

$orderby
SQL 文の Order By 句に相当

$skip
指定した数のデータを読み飛ばす

$top
指定した数のデータを取得する
public IQueryable<Contact> Get()
{
    return db.Contacts.AsQueryable();
}


IQueryable に対応するだけでよい
属性による検証
 public class Contact
 {
     public int ID { get; set; }


     [Required(ErrorMessage = "名前を入力してください")]
     public string Name { get; set; }


     [Required(ErrorMessage = "メールアドレスを入力してください")]
     public string Mail { get; set; }
 }

Model バインディングにより ModelState に検証結果が格納される
カスタムフィルターによる処理の拡張
 public class ValidationActionFilter : ActionFilterAttribute
 {
     public override void OnActionExecuting(HttpActionContext context)
     {
         var modelState = context.ModelState;
         if (!modelState.IsValid) {
             dynamic errors = new JsonObject();
             foreach (var key in modelState.Keys) {
                 var state = modelState[key];
                 if (state.Errors.Any()) { errors[key] = state.Errors.First().ErrorMessage; }
             }
             context.Response = new HttpResponseMessage<JsonValue>(errors, HttpStatusCode.BadRequest);
         }
     }
 }
OnActionExecuting
Action の処理開始前

OnActionExecuted
Action の処理終了後

OnAuthorization
認証チェック時

OnException
例外発生時
[Authorize] 属性の追加
HTTPステータス 302 が返される
Loginページへのリダイレクト

※対応の詳細は下記で
http://blogs.msdn.com/b/tsmatsuz/archive/2012/03/12/asp-net-web-api-validation-
authentication-authorization-exception-handling-using-custom-filter.aspx
Getting Started with ASP.NET Web API
http://www.asp.net/web-api
Self Hosting / Dependency Resolver の利用等の情報も

ASP.NET Web API Reference
http://msdn.microsoft.com/en-us/library/hh849329(v=vs.108).aspx

Source Code
http://aspnetwebstack.codeplex.com/
WDD 会場内の日経 BP 社ブースと日経 BP 書店にて

プログラミング
Microsoft ASP.NET MVC
特別価格にて先行発売中! (一般発売は 5/8 予定)




プログラミング
Microsoft ASP.NET 4
特別価格にて発売中!                                  (特別価格専用, 6/30 まで)
                              http://ec.nikkeibp.co.jp/nsp/aspnetmvc/
SC-014

20120425