SlideShare a Scribd company logo
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
ありがとうございました

More Related Content

PDF
エンジニアから飛んでくるマサカリを受け止める心得
PDF
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
PDF
WebブラウザでC#実行 WebAssemblyの技術
PDF
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
PPTX
ぼくのかんがえたさいきょうのせつびせいぎょしすてむ
PDF
Lxc で始めるケチケチ仮想化生活?!
PPTX
Async awaitでの繰り返し処理についての小話
PDF
Node-REDでプロジェクト管理を始めてみよう!
エンジニアから飛んでくるマサカリを受け止める心得
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
WebブラウザでC#実行 WebAssemblyの技術
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
ぼくのかんがえたさいきょうのせつびせいぎょしすてむ
Lxc で始めるケチケチ仮想化生活?!
Async awaitでの繰り返し処理についての小話
Node-REDでプロジェクト管理を始めてみよう!

What's hot (20)

PDF
ゼロから始めるSparkSQL徹底活用!
PDF
GitHubの機能を活用したGitHub Flowによる開発の進め方
PDF
きつねさんでもわかるLlvm読書会 第2回
PDF
日本語テストメソッドについて
PPTX
HamaCTF WriteUp (Unpack category)
PDF
CodeBuildを身近にするためのはじめの一歩
PDF
AWS Black Belt Techシリーズ Amazon CloudSearch
PPTX
事業計画書 テンプレート
PPTX
サイバーエージェント様 発表「OpenStackのNWと物理の話」
PDF
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
PDF
C# で Single Page Web アプリを 開発できる Blazor ― その魅力
PPTX
Power Platform +αを活用すると家計簿はこんなにも便利になる
PDF
130821 owasp zed attack proxyをぶん回せ
PDF
SharePoint Framework Teams タブ開発基礎講座
PDF
EtherCATやPROFINETを OPC UAで接続してみた
PPTX
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
PDF
ブラック企業から学ぶMVCモデル
PDF
[Cloud OnAir] オンプレミスにあるデータを GCP で分析する前に知っておきたいアーキテクチャ 2019年5月30日 放送
PDF
難読化PowerShell芸入門
PDF
MHA for MySQLとDeNAのオープンソースの話
ゼロから始めるSparkSQL徹底活用!
GitHubの機能を活用したGitHub Flowによる開発の進め方
きつねさんでもわかるLlvm読書会 第2回
日本語テストメソッドについて
HamaCTF WriteUp (Unpack category)
CodeBuildを身近にするためのはじめの一歩
AWS Black Belt Techシリーズ Amazon CloudSearch
事業計画書 テンプレート
サイバーエージェント様 発表「OpenStackのNWと物理の話」
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
C# で Single Page Web アプリを 開発できる Blazor ― その魅力
Power Platform +αを活用すると家計簿はこんなにも便利になる
130821 owasp zed attack proxyをぶん回せ
SharePoint Framework Teams タブ開発基礎講座
EtherCATやPROFINETを OPC UAで接続してみた
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
ブラック企業から学ぶMVCモデル
[Cloud OnAir] オンプレミスにあるデータを GCP で分析する前に知っておきたいアーキテクチャ 2019年5月30日 放送
難読化PowerShell芸入門
MHA for MySQLとDeNAのオープンソースの話
Ad

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

PPT
Webサーバの基礎知識【編集済み】
PDF
Laravel5を使って開発してみた
PPTX
Web API(Dynamics 365 )勉強会
PPT
20080524
PDF
ASP.NET WEB API 開発体験
PDF
開発者におくるサーバーレスモニタリング
PPT
マッシュアップ勉強会
PPT
マッシュアップ勉強会
PDF
Restful Web Service Ch2
PDF
ASP.NET シングル ページ アプリケーション (SPA) 詳説
PDF
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
PPTX
オフラインファーストの思想と実践
PDF
App012 linux java_にも対応!_azure_service_fabric_を
PPTX
App012 linux java_にも対応!_azure_service_fabric_を
PDF
Mvc conf session_1_osada
PPTX
勉強会資料①
PPT
20090328
PDF
Goji とレイヤ化アーキテクチャ
PPTX
UnicastWS vol.2
PDF
ASP. NET Core 汎用ホスト概要
Webサーバの基礎知識【編集済み】
Laravel5を使って開発してみた
Web API(Dynamics 365 )勉強会
20080524
ASP.NET WEB API 開発体験
開発者におくるサーバーレスモニタリング
マッシュアップ勉強会
マッシュアップ勉強会
Restful Web Service Ch2
ASP.NET シングル ページ アプリケーション (SPA) 詳説
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
オフラインファーストの思想と実践
App012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_を
Mvc conf session_1_osada
勉強会資料①
20090328
Goji とレイヤ化アーキテクチャ
UnicastWS vol.2
ASP. NET Core 汎用ホスト概要
Ad

More from miso- soup3 (8)

PDF
2016/05/01 Visual Studio with Cordova
PPTX
2016/12/17 ASP.NET フロントエンドタスク入門
PDF
Visual Studio 2017 RC C# まわり
PDF
OWIN って何?
PDF
One ASP.NET, OWIN & Katana
PDF
Web開発の最新トレンド ~1から知るASP.NET~
PDF
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装
PDF
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
2016/05/01 Visual Studio with Cordova
2016/12/17 ASP.NET フロントエンドタスク入門
Visual Studio 2017 RC C# まわり
OWIN って何?
One ASP.NET, OWIN & Katana
Web開発の最新トレンド ~1から知るASP.NET~
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825

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