50分で掴み取る
ASP.NET Web API
パターン&テクニック
矢後 比呂加
2013/06/08 14:35~15:25
2
自己紹介
Twitter : miso_soup3
Blog : http://d.hatena.ne.jp/miso_soup3/
開発経験:業務アプリ開発, C#,
ASP.NET MVC, ASP.NET Web API
北陸3県(富山・石川・福井)を中心に、
マイクロソフト系の技術について広く語り合う勉強会
Hokuriku.NET
矢後 比呂加 Hiroka Yago
3
アジェンダ
1.ASP.NET Web API の利用例
2.フレームワーク内部へ Dive !
3.強力な開発支援機能
4
アジェンダ
1.ASP.NET Web API の利用例
2.フレームワーク内部へ Dive !
3.強力な開発支援機能
ちょっと
語らせて
これから
始める方へ
5
セッションのゴール
1.ASP.NET Web API の利用例
2.フレームワーク内部へ Dive !
3.強力な開発支援機能
ASP.NET Web APIはどのように利用できるかを知る
広く浅く知り、今後の問題解決に役に立つ知識を得る
用意されている支援機能の使い道を知る
6
ちょっと語らせて
One ASP.NET
が熱い!
画像: One ASP.NET Sneak Peek: Elegant Web Forms and Snowballs in Hell
7
ちょっと語らせて
画像: One ASP.NET Sneak Peek: Elegant Web Forms and Snowballs in Hell
サービスの1つ
ASP.NET Web API
8
ちょっと語らせて
ASP.NET Web API
• HTTP サービスを構築するフレームワーク
• 2012 年 8 月
Visual Studio 2012, .NET Framework 4.5,
ASP.NET MVC 4 と共にリリース
9
1.ASP.NET Web API の利用例
数ある中から3つを紹介
10
1.ASP.NET Web API の利用例
① Web サイト + ASP.NET Web API + JavaScript
Web サイト
ASP.NET
MVC or WebForms
(.NET 4 以上)
11
1.ASP.NET Web API の利用例
ASP.NET Web API
Ajax で シームレスな
Web アプリケーション
① Web サイト + ASP.NET Web API + JavaScript
Web サイト
ASP.NET
MVC or WebForms
(.NET 4 以上)
12
1.ASP.NET Web API の利用例
• 既存資産との連携が可能
• ※ただし ASP.NET Web API は .NET 4 以上 で動作
• ASP.NET Web Forms, MVC と一緒に利用可能
• NuGet により容易に組み込める
• ASP.NET 認証機能が利用可能
① Web サイト + ASP.NET Web API + JavaScript
13
1.ASP.NET Web API の利用例
① Web サイト + ASP.NET Web API + JavaScript
Visual Studio 2010 で、
.NET 4 の Web Forms プロジェクトに
NuGet で ASP.NET Web API を組み込み、
Ajax を使った機能を実装してみる。
14
1.ASP.NET Web API の利用例
② Web サイト + ASP.NET Web API + JavaScript
+ モバイルアプリ
Web サイト
ASP.NET
MVC or WebForms
(.NET 4 以上)
ASP.NET Web API
15
1.ASP.NET Web API の利用例
② Web サイト + ASP.NET Web API + JavaScript
+ モバイルアプリ
Web サイト
ASP.NET
MVC or WebForms
(.NET 4 以上)
ASP.NET Web API Windows Phone
HTTP サービス
として外部に公開
モバイルアプリ
iOS
Windows ストアアプリ
16
1.ASP.NET Web API の利用例
③ クライアントとして HTTP サービスを利用する
HTTP サービスを
提供する側
ASP.NET Web API
HTTP サービスを
利用する側
↑先の2つの例はこちら ↑今から紹介する例はこちら
17
1.ASP.NET Web API の利用例
③ クライアントとして HTTP サービスを利用する
ニュースやお天気
などの
HTTP サービス
※ASP.NET Web API に限らず
HTTP Client
HTTP サービスを
呼び出すための
クライアント
ライブラリ
18
1.ASP.NET Web API の利用例
③ クライアントとして HTTP サービスを利用する
• HTTP Client
• HTTP サービス を呼び出すためのクライアントライブラリ
• ASP.NET Web API の中に含まれている
• .NET 4.5 に追加された
• (.NET 4 では、NuGet からライブラリを取得することで利用可能)
• Windows Phone や Windows ストアアプリでも利用される
19
1.ASP.NET Web API の利用例
③ クライアントとして HTTP サービスを利用する
Twitter API を、
HTTP Client ライブラリを使って
呼び出す。
20
1.ASP.NET Web API の利用例
③ クライアントとして HTTP サービスを利用する
HTTP Client ?
ASP.NET Web API に含まれている??
NuGet で取得できる??
21
1.ASP.NET Web API の利用例
System.Net.Http.dll, …
Microsoft.Net.Http
System.Net.Http.Formatting.dll
Microsoft.AspNet.WebApi.Client
System.Web.Http.dll
Microsoft.AspNet.WebApi.Core
青文字… NuGet のパッケージ名
System.Web.Http.WebHost.dll, …
Microsoft.AspNet.WebApi.WebHost
Microsoft.AspNet.WebApi
HTTP Client で使う ライブラリ
ASP.NET Web API で使う
ライブラリ
22
1.ASP.NET Web API の利用例
System.Net.Http.dll, …
Microsoft.Net.Http
System.Net.Http.Formatting.dll
Microsoft.AspNet.WebApi.Client
System.Web.Http.dll
Microsoft.AspNet.WebApi.Core
青文字… NuGet のパッケージ名
System.Web.Http.WebHost.dll, …
Microsoft.AspNet.WebApi.WebHost
Microsoft.AspNet.WebApi
HTTP Client で使う ライブラリ
ASP.NET Web API で使う
ライブラリ
←?
23
1.ASP.NET Web API の利用例
Media Type Formatter (System.Net.Http.Formatting.dll)
• ASP.NET Web API の重要なキーワードの1つ
• HTTP リクエスト・レスポンスの Body ⇔
オブジェクトの変換を受け持つ
HTTP Body
オブジェクト
• JsonMediaTypeFormatter
• XMLMediaTypeFormatter
• FormUrlEncodedMediaTypeFormatter
24
1.ASP.NET Web API の利用例
Media Type Formatter (System.Net.Http.Formatting.dll)
HTTP リクエスト
Body
オブジェクト
HTTP レスポンス
Body
オブジェクト
オブジェクト オブジェクト
クライアント側
サーバー側
25
• ASP.NET Web API の利用例 を3つ紹介
• ASP.NET WebForms, MVC との連携。.NET 4 以上で動作。
• HTTP Client で HTTP サービスを呼び出す
• System.Net.Http.Formatting.dll
1.ASP.NET Web API の利用例
26
2.
フレームワーク内部へ
Dive !
27
ご準備下さい
ASP.NET Web API
HTTP メッセージライフサイクルポスター
http://www.microsoft.com/ja-jp/download/details.aspx?id=36476
28
2.フレームワーク内部へ Dive !
• ASP.NET Web API のフレームワーク内部の全体を、
広く、浅く、解説します。
• 詳しくは、必要になってから。
今後の開発で解決方法を簡単に見つけ出すために。
29
2.フレームワーク内部へ Dive !
• HttpRequestMessage と HttpResponseMessage
• HTTP メッセージハンドラー
• コントローラー
• アクションの選択
• フィルター
• モデルバインディング
• 処理の結果の変換
• ホスティング
ピックアップ!
30
2.フレームワーク内部へ Dive !
コントローラアクション
31
2.フレームワーク内部へ Dive !
主役
リクエスト レスポンス
GET /person/list
HTTP1.1
Host : sample.com
Accept : Application/json
HTTP/1.1 200 OK
…
Content-Type :
Application/json
{ Id : 1, Name : “Taro” }
32
2.フレームワーク内部へ Dive !
HTTP メッセージハンドラー
• パイプラインの早い段階で、
処理を差し込む
• 全てのルート、または、あるルート
毎に、メッセージハンドラーを差し
込むことができる
コントローラ
33
2.フレームワーク内部へ Dive !
HTTP メッセージハンドラー
例
• ヘッダーに埋め込まれた API キーを
チェックして、不正の場合は、エラーを
返す
• 全てのレスポンスに独自のヘッダーを
埋め込む
• HTTPS でない場合はエラーを返す
コントローラ
34
2.フレームワーク内部へ Dive !
アクションの選択
GET Http://xxx.com/api/persons
API Controller1
アクション1
アクション2
API Controller2
アクション3
アクション4
35
2.フレームワーク内部へ Dive !
フィルター
36
2.フレームワーク内部へ Dive !
フィルター
• 認証フィルター、例外フィルター、アクションフィルターの3つ
例
• 例外が発生した時に、メールを送信する
• 特定のエラーが発生した場合は、専用のエラーメッセージを
レスポンス内に埋め込む
• モデル検証に失敗した時に、失敗の内容をレスポンス内に埋め込
む
37
2.フレームワーク内部へ Dive !
モデルバインディング
URL Body Custom Value
Media Type Formatter
38
2.フレームワーク内部へ Dive !
モデルバインディング
例
• URL の一部を、ルートデータとして引数にバインドさせる
• 現在ログイン中のユーザ名を、引数にバインドさせる
• あるヘッダーの値を、引数にバインドさせる
39
2.フレームワーク内部へ Dive !
結果(戻り値)の変換
例
• Media Type Formatter を利用し、CSV や Text に対応した API
を実装する
• Accept ヘッダーの値ではなく、http://….json, http://….xml と
いった URL 末尾の値により、レスポンスの Body の形式を
決定する。
40
3.強力な開発支援機能
41
3.強力な開発支援機能
• NuGet からインストール
• ASP.NET MVC によるサイトの生成
• ASP.NET 認証の利用
• CSS によるデザインのカスタマイズ
• 出力するドキュメントのカスタマイズ
• CI と連携し、API ヘルプページのサイトを継続的に発行
することも可能
API ヘルプページ自動生成機能
42
3.強力な開発支援機能
テスタビリティの高さを生かしたデバッグ・テスト
ASP.NET Web API で構築された API
を呼び出し、レスポンスをテストする
43
3.開発を支える強力な支援機能
トレース機能
44
3.強力な開発支援機能
トレース機能
• フレームワーク内随所の処理について出力
• NuGet から取得可能(Microsoft.AspNet.WebApi.Tracing)
• 問題発生時の解決に役立つ機能
• トレースの出力先、出力レベルはカスタマイズ可能
• Azure 環境下でも有効。log4net で出力など。
• トレースを出力する対象の処理は、デフォルトの他にも、
開発者が自由に設定可能
45
3.強力な開発支援機能
トレース機能
46
3.強力な開発支援機能
トレース機能 利用例
Windows Mac
iOS アプリを
デバッグ
Visual Studio で、
ASP.NET Web API
をデバッグ
http://192.168.
0.XX/api/values
トレース出力を確認
47
3.強力な開発支援機能
トレース機能 メカニズム
なぜ、フレームワーク内部の
処理の詳細を出力できるのか?
トレース用の部品が挟み込まれている?
48
3.強力な開発支援機能
トレース機能 メカニズム
…本来の処理 …トレース処理
…本来の処理
置き換える
49
3.強力な開発支援機能
トレース機能 メカニズム
• ASP.NET Web API の IoC コンテナ対応
• 拡張する場合は、トレース機能を意識したい
50
まとめ
• ASP.NET Web API の利用例 を3つ紹介
• ASP.NET WebForms, MVC との連携。.NET 4 以上で動作。
• HTTP Client で HTTP サービスを呼び出す
• Media Type Formatter
• フレームワーク内部について
• 支援機能を3つ紹介
• API ヘルプページ自動生成
• テスタビリティの高さを利用する
• トレース機能
• メカニズム
51
これから始める方へ
• とりあえずどんな感じかコードを見たい!
• → ASP.NET Web API プロジェクトテンプレートではなく、
スキャッフォールド機能で生成されるコードがおすすめ。
CRUD 一連の処理が記述されています。
My Favorite Features: Entity Framework Code First and ASP.NET Web
API
• ドキュメント
• ASP.NET オフィシャルサイト
• 英語ですが、概要からサンプルコード、拡張の仕方まで充実しています。
http://www.asp.net/web-api
• 「Overview」「Samples」がおすすめ。
52
これから始める方へ
• 注意
• ASP.NET MVC と設計が似ているが、使用しているライブラリは違うので、
名前空間に注意。(System.Web.Mvc と System.Web.Http)
• ルーティング
• ASP.NET MVC のルーティングとは違うので注意。
トレース機能や、Route Debugger の使用を推奨。
• Fiddler の使い方を簡単に学んでおくと捗る。
53
ありがとうございました

50分で掴み取る ASP.NET Web API パターン&テクニック