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

17,810 views

Published on

Published in: Technology

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

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

×