Your SlideShare is downloading. ×

RESTful Webサービス

3,891
views

Published on

わんくま同盟東京勉強会 #52 セッション資料 …

わんくま同盟東京勉強会 #52 セッション資料
2010/10/23

Published in: Technology

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,891
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
48
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTFul Webサービス 猪股 健太郎 @matarillo
  • 2. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive アジェンダ • RESTの説明 – RESTとは – RESTの原則 – RESTful WebサービスとHTTP • .NETでの実装 – WCF – WCF REST Starter Kit – RestCake – ASP.NET MVC – OpenRasta
  • 3. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 質問1 • この本のどちらかを持ってる人
  • 4. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 質問2 • 以下のどれかを受講した人 Tech・Ed Japan 2009 T2-310 「WCF で実現する SOA、REST」 (MS 松崎さん) Tech・Ed Japan 2010 T6-312 「WCF 4 における新機能のポイント」 (アークウェイ 奥田さん・飯田さん) Tech・Ed Japan 2010 T4-303 「Open Data Protocol (Odata) と WCF Data Services によるサービスの作成」 (MS 井上さん)
  • 5. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 第1部 RESTの説明
  • 6. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive REST • 2000年 • ロイ・フィールディングの博士論文 – なぜWebはこんなに普及したのか? – なぜWebは大規模でもうまく動くのか? – Webの設計原則とは? それを“REST”と呼ぶことにする。
  • 7. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive REST ○× • 設計原則 • アーキテクチャ スタイル • 通信プロトコルでは ない • 仕様ではない • 標準ではない
  • 8. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 言葉の定義:Webサービス • 広い意味でのWebサービス – Webで提供されるサービス • 検索エンジン、Webメール、顧客管理SaaS • 中ぐらいの意味でのWebサービス – プログラムが呼び出すWeb API • Twitter API、Amazon Web サービス、Bing API • 狭い意味でのWebサービス – SOAPおよびWS-*を使ったインターフェース
  • 9. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 言葉の定義:Webサービス • 広い意味でのWebサービス – Webで提供されるサービス • 検索エンジン、Webメール、顧客管理SaaS • 中ぐらいの意味でのWebサービス – プログラムが呼び出すWeb API • Twitter API、Amazon Web サービス、Bing API • 狭い意味でのWebサービス – SOAPおよびWS-*を使ったインターフェース 今日はこの意味です。
  • 10. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 今日の言葉の定義 • RESTful Webサービスとは REST アーキテクチャスタイルを 採用しているWebサービスのこと。 – 「RESTっぽいWebサービス」 – 「REST」という言葉の使われ方は 「オブジェクト指向」という言葉の 使われ方にも似ている。 – RESTを構成する原則は複数ある。
  • 11. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則 • RESTアーキテクチャスタイルの原則を 大きく2つに分類する – 分散システムとしての構造の原則 • クライアント・サーバー型の発展形 – 分散システムが扱う情報の原則 • リソース • HATEOAS
  • 12. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(構造編) • クライアント・サーバー クライアント サーバー
  • 13. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(構造編) • クライアント・サーバー&ステートレス クライアント ステートレスサーバー
  • 14. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(構造編) • クライアント・サーバー&ステートレス &キャッシュ クライアント ステートレスサーバー
  • 15. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(構造編) • クライアント・サーバー&ステートレス &キャッシュ&統一インターフェース クライアント ステートレスサーバー
  • 16. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(構造編) • クライアント・サーバー&ステートレス &キャッシュ&統一インターフェース &階層化システム クライアント ステートレスサーバー
  • 17. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(構造編) • クライアント・サーバー&ステートレス &キャッシュ&統一インターフェース &階層化システム &コード・オン・デマンド(任意) クライアント ステートレスサーバー
  • 18. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(情報編) • リソースとは? – 名前がつけられる情報すべて – 名前がつけられる=他と区別できる – 抽象的
  • 19. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(情報編) • リソース 「東京の今日の天気」 「わんくま同盟のメンバリスト」 「藍澤光の壁紙(WP7用)」
  • 20. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(情報編) • リソース&アドレス 「東京の今日の天気」 http://weather.yahoo.co.jp/weather/jp/13/4410.html 「わんくま同盟のメンバリスト」 http://www.wankuma.com/member/ 「藍澤光の壁紙(WP7用)」 http://www.microsoft.com/taiwan/silverlight/images/480X800_f.jpg
  • 21. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(情報編) • リソース&アドレス&表現 「東京の今日の天気」 http://weather.yahoo.co.jp/weather/jp/13/4410.html html 「わんくま同盟のメンバリスト」 http://www.wankuma.com/member/ html 「藍澤光の壁紙(WP7用)」 http://www.microsoft.com/taiwan/silverlight/images/480X800_f.jpg jpeg
  • 22. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(情報編) • リソース&アドレス&表現&メタデータ 「東京の今日の天気」 http://weather.yahoo.co.jp/weather/jp/13/4410.html html ピンポイント天気へのリンクなど 「わんくま同盟のメンバリスト」 http://www.wankuma.com/member/ html 「藍澤光の壁紙(WP7用)」 http://www.microsoft.com/taiwan/silverlight/images/480X800_f.jpg jpeg 最終更新日時:10/08/2010 18:31:46
  • 23. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTの原則(情報編) • HATEOAS – Hypermedia as the Engine of Application State – アプリケーションの状態を表現する 機構としてハイパーメディアを使う – アプリケーションの状態遷移に ハイパーリンクを活用する • 商品一覧のXMLに「次の100件」へのリンクをいれ ておく
  • 24. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive ここまでのまとめ • RESTはWebの設計原則を分析したもの • RESTはアーキテクチャスタイル • 大きく2つに分類できる – 分散システムとしての構造の原則 • クライアント・サーバー型の発展形 – 分散システムが扱う情報の原則 • リソース • HATEOAS
  • 25. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTという単語 • Representational State Transfer – リソースの現在の状態を – 表現したものを – 転送する 「Webで使われるプロトコルは HTTP (HyperText Transfer Protocol) だけど、これって ハイパーテキスト以外にも 便利に使えるよね?」
  • 26. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTとHTTP 抽象概念 具体的な例 REST Web リソース ハイパー メディア アドレス URI 統一 インターフェース HTTP
  • 27. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTful Webサービス 抽象概念 具体的な例 REST Webサービス リソース (リソース) アドレス URI 統一 インターフェース HTTP
  • 28. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 統一インターフェースとしてのHTTP • HTTPとは – リソースのアドレスをURLで – リソースのメタデータをHTTPヘッダで – リソースの表現をHTTPボディで – リソースに対する操作をHTTPメソッドで • 表すプロトコル
  • 29. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive HTTPの4大メソッド • GET – リソースの表現を取得する • POST – 既存のリソースに関連する何かを追加する – 既存のリソースにデータを渡して何かをする • DELETE – 既存のリソースを削除する • PUT – URLを指定して新しいリソースを作成する – 既存のリソースを変更する
  • 30. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive HTTPのベストプラクティス • GET/DELETE/PUTを「べき等」にする • 可能な限り標準のメソッドを使う • POSTメソッドを濫用しない – HTTPボディにリソースのアドレスを含めない – HTTPボディにリソースの操作を含めない
  • 31. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTではないもの • RPCスタイルのアーキテクチャ – HTTPボディにリソースのアドレスを含める – HTTPボディにリソースの操作を含める – 結果的に、POSTばかりを使う <?xml version="1.0"?> <methodCall> <methodName>examples.getStateName</methodName> <params> <param> <value><i4>40</i4></value> </param> </params> </methodCall>
  • 32. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RPCスタイルは「間違っている」か? • そうとは言えない • RPCスタイルのほうが向いている 処理もある • ただ、RESTの方が Webの利点を享受できる – 普及性やスケーラビリティ
  • 33. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTful Webサービスの設計 1. サービスが扱うデータ集合を特定する 2. データ集合をリソースに分ける 3. リソースにURIをつける 4. リソースに対する操作を決める 5. 送受信する表現を決める 6. リソース間のリンクを設計する 7. リソースの状態遷移を検討する 8. エラーを検討する
  • 34. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTful Webサービスのベストプラクティス • コレクションリソース – http://edtter.com/chack/status • GET……リソース一覧の取得 (R) • POST……新規リソースの追加 (C) – 作成されたリソースのURIをレスポンスに含める • 個別リソース – http://edtter.com/chack/status/123456 • GET……個別リソースの取得 (R) • PUT……個別リソースの更新 (U) • DELETE……個別リソースの削除 (D)
  • 35. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RESTful Webサービスのベストプラクティス • Atom出版プロトコル (AtomPub) – IETFが標準化 → RFC 5023 – Web リソースを出版・編集する • コレクション: 全体的に、あるいは部分的に検索さ れ得るリソースの集合 • サービス: コレクションの発見と記述 • 編集: リソースの生成、編集、削除 – リソース一覧のページングにも対応
  • 36. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 第2部 .NETでの実装
  • 37. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive WCF REST • .NET Framweork 3.5以降 • WebServiceHostFactoryクラス • WCFの面倒なconfigが不要 • クライアントの「サービス参照」不可 <%@ ServiceHost Language="C#" Debug="true" Service="WcfRestService1.Service1" CodeBehind="Service1.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %> Service1.svc
  • 38. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive WCF REST • HTTP GETは[WebGet]カスタム属性、 それ以外は[WebInvoke]カスタム属性 • リクエストやレスポンスは POX / JSON / バイトストリームの三択 • HttpContextの代わりに WebOperationContext – “201 Created”と“404 Not Found”には ショートカットあり
  • 39. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive WCF REST • Visual Studio ギャラリーから テンプレートを ダウンロード可能 (VS2010用)
  • 40. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive WCF RESTのgood/bad • いい点 – わりと自由にできる • つらい点 – カスタムシリアライズ – HATEOAS – URLに「○○.svc」が含まれる • .NET4からはルーティングと統合できる – クライアントの実装 – 実はWCF
  • 41. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive WCF REST Starter Kit • WCF REST Starter Kit – http://aspnet.codeplex.com/wikipage?title=WCF %20REST – Preview 2 (2009/3/10) はVS2008 SP1用 – サーバ側 • POX、単一要素、コレクション、 Atom Feed、AtomPub – クライアント側 • HttpClient
  • 42. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive WCF REST Starter Kitのgood/bad • いい点 – 型にはまった実装は楽 • CRUDとHTTPメソッドのマッピングとか • POX/JSON対応サービスとか • ヘルプページとか • 例外処理とか – HttpClientが手軽 – OSS • つらい点 – 自由がきかない – VS2010未サポート (Preview2)
  • 43. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive RestCake • RestCake – http://rest.codeplex.com/ – http://restcake.net/Overview.aspx • いい点 – WCFじゃない – でも似たような感じで作れる – 罠が少ない • JSONとか、匿名型とか、循環参照とか…… – OSS • つらい点 – 自己責任
  • 44. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive ASP.NET MVC • ASP.NET MVCをWebサービスに使う – Viewが「リソースの表現」になるだけ。 • いい点 – リソース表現が自由 – WCFじゃない – OSS – 赤シャツ印 • つらい点 – GET/POST/PUT/DELETE/HEADだけ対応 – 細かい道具がそろってない
  • 45. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive OpenRasta • OpenRasta – http://openrasta.com/ – RESTful Webアプリケーション/Webサービス – http://live.visitmix.com/MIX10/Sessions/EX19 • いい点 – ASP.NET MVCに近い形で、より強力にRESTをサポート – .NET Framework 2.0以降で動作 – リソース表現が自由 – 属性いらない • つらい点 – ??? REST Architecture Solution Targeting Asp.net
  • 46. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 質疑応答タイム
  • 47. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 補足:トランザクションの実現 • http://developer.cybozu.co.jp/kazuho/2010/04/rest- re-web-a6d.html – トランザクションの開始は POST を使ったトランザク ションリソースの生成 – トランザクション開始後は POST ではなく PUT を使い、 クライアントがリクエスト ID を指定することで、 ネットワーク障害への耐性を確保 – トランザクションのコミットも再送可能じゃないと 困るので PUT – コミットの返り値を確認してからトランザクション リソースを DELETE
  • 48. わんくま同盟 東京勉強会 #52 Wankuma Developer Deep Dive 参考情報 • REST in Windows Communication Foundation (WCF) – http://msdn.microsoft.com/wcf/rest • A Guide to Designing and Building RESTful Web Services with WCF 3.5 – http://msdn.microsoft.com/en- us/library/dd203052.aspx