Recommended
PDF
PDF
PDF
PDF
[AWSマイスターシリーズ] Instance Store & Elastic Block Store
PDF
PPTX
PDF
PPTX
GitLab から GitLab に移行したときの思い出
PDF
PPTX
Redis勉強会資料(2015/06 update)
PDF
PDF
HowToDevelopATeamGrowsByThemselves_SCF_OSaka2022.pdf
PDF
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
PPTX
PDF
PDF
これからSpringを使う開発者が知っておくべきこと
PDF
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
PDF
Ingressの概要とLoadBalancerとの比較
PDF
PDF
DeNA のデータ活用を支える BigQuery データの民主化とガバナンス強化の軌跡 | Google Cloud INSIDE Games & App...
PDF
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
PDF
PDF
PDF
PDF
はじめようARCore: Motion Tracking & Image Tracking編
PDF
単なるキャッシュじゃないよ!?infinispanの紹介
PPTX
モバイル通信を使わない 近接端末間通信対戦のレシピ
PDF
PDF
More Related Content
PDF
PDF
PDF
PDF
[AWSマイスターシリーズ] Instance Store & Elastic Block Store
PDF
PPTX
PDF
PPTX
GitLab から GitLab に移行したときの思い出
What's hot
PDF
PPTX
Redis勉強会資料(2015/06 update)
PDF
PDF
HowToDevelopATeamGrowsByThemselves_SCF_OSaka2022.pdf
PDF
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
PPTX
PDF
PDF
これからSpringを使う開発者が知っておくべきこと
PDF
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
PDF
Ingressの概要とLoadBalancerとの比較
PDF
PDF
DeNA のデータ活用を支える BigQuery データの民主化とガバナンス強化の軌跡 | Google Cloud INSIDE Games & App...
PDF
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
PDF
PDF
PDF
PDF
はじめようARCore: Motion Tracking & Image Tracking編
PDF
単なるキャッシュじゃないよ!?infinispanの紹介
PPTX
モバイル通信を使わない 近接端末間通信対戦のレシピ
Viewers also liked
PDF
PDF
PDF
サバフェス 2016 Yahoo! ID連携のご紹介 〜OpenID Connect入門〜
PDF
PDF
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
PDF
Microserviceなんて最初からやるもんじゃ無かった
PPTX
Beginning Java EE 6 勉強会(6) #bje_study
PDF
金融 API 時代のセキュリティ: OpenID Financial API (FAPI) WG
PDF
PDF
PDF
なぜOpenID Connectが必要となったのか、その歴史的背景
PDF
Spring Bootをはじめる時にやるべき10のこと
PDF
エンタープライズITでのOpenID Connect利用ガイドライン
PDF
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
PDF
PDF
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
PDF
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
Similar to REST 入門
PDF
Beginning Java EE 6 勉強会(7) #bje_study
PPT
OSC2008 Tokyo/Spring REST勉強夜会
PDF
PDF
RESTful #とは RailsスタイルからRESTを学ぼう
PDF
PDF
PPT
PDF
ODP
PDF
PDF
Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)
PDF
ochacafe#6 人にもマシンにもやさしいAPIのエコシステム
PDF
50分で掴み取る ASP.NET Web API パターン&テクニック
PPTX
PDF
Rails と Rack と HTTP と通信の話
PPT
初めての REST - Representational State Transfer
PPT
『RESTful Web サービス』読書会 第4回 9章 説明資料
PPTX
エンジニアのための勉強会 #3 『RESTful API』
PDF
Spring Fest 2018 Spring Bootで作るRESTful Web Service
PDF
More from Yohei Yamamoto
PDF
リコーUCSの開発をリーンスタートアップ的視点でふりかえる
PDF
PDF
CAPとBASEとEventually Consistent
PDF
Rubykaigi2008: REST 信者から見た Ruby と Rails
PPT
PPT
PPT
REST 入門 1. REST 入門 株式会社リコー ソフトウェア研究開発本部 山本陽平 2005 年 11 月 24 日 第八回 XML 開発者の日 2. 3. 自己紹介 ソフトウェア技術者、 XML guy 1975 年生まれ ( 同い年の人の例 ) 経験 Web/XML 関係でずーっと (1994 年から ) 画像機器上の Web 技術関係 UPnP, SOAP, etc… Java で Web サービス開発 Axis, etc… REST との出会い 2004 年 8 月、村田さんの blog にて それまでは REST == XML-RPC だと思ってた http://d.hatena.ne.jp/Nayuta/20050727#1122477974 4. 5. はじめに REST は~ではない XML と HTTP の組み合わせではない API の仕様ではない W3C の仕様ではない SOAP の対抗仕様ではない SOA ではない URL のパラメータをいじって XML データを得る方法ではない 今日の目的 REST の誤解を解きたい アーキテクチャスタイルの重要性を共有したい 6. Representational State Transfer REST は WWW のアーキテクチャスタイル Roy Fielding (Apache.org の co-founder) の博士論文 残念ながら日本ではマイナー ( だった ) 海外では 2002 年ごろから盛り上がっている REST の歴史は 1996 年くらいから (HTTP/1.1 の策定とともに ) REST スタイルを知っていると Web アプリ / サービスの スケーラビリティ が上がる、かもしれない Web アプリ / サービスの ユーザビリティ が上がる、かもしれない Web アプリ / サービスが セキュア になる、かもしれない APP みたいなプロトコルを簡単に出せる、かもしれない いわゆる 疎結合 が実現できる、かもしれない 7. 8. アーキテクチャスタイルとは? 英語では “Architectural Style” ソフトウェア工学用語 別名(マクロ)アーキテクチャ パターン アーキテクチャのパターン アーキテクチャそのものではない ことに注意 ミクロアーキテクチャパターン(デザインパターン)の親戚 デザインパターンの方が細かいシステムを対象としている 代表的なアーキテクチャスタイル P2P、MVC、パイプ&フィルタ、クライアントサーバ 各スタイルはそれぞれ特徴的な 制約 の集合から成り立っている MVC: model, view, controller に役割を分担 パイプ&フィルタ: コンポーネント間のデータの流れは一方向 9. 10. 余談: 訳語について Architectural style の訳語は ? (mixi の REST コミュで聞いてみた ) アーキテクチャ的スタイル アーキテクチャのスタイル アーキテクチャの流儀 アーキテクチャ作法 アーキテクチャ様式 設計思想 結局「ソフトウェアエンジニアリング基礎知識体系 – SWEBOK 2004- 」に従った ■ アーキテクチャスタイル ( マクロアーキテクチャパターン ) アーキテクチャスタイルとは、「一組のアーキテクチャあるいはアーキテクチャのグループがそれを満すような、一連の制約」である。したがって、アーキテクチャスタイルは、ソフトウェアシステムのハイレベルな構成 ( マクロアーキテクチャ ) を提供するメタモデルであると見なすこともできる。 11. 12. リソース (1/3) REST における超重要な概念のひとつ リソースの例 東京の天気予報 2005年11月24日のスケジュール 新花巻駅の写真 Dijkstra著 ”Go To Statement Considered Harmful” 僕の最近のブックマーク リソース = 「 名前 」のつくありとあらゆる情報 REST ではリソースをいろいろ操作する 13. リソース (2/3) 識別子 すべてのリソースは識別子 (identifier) を持つ 一つのリソースに複数の識別子がつくこともある Web では URI 東京の天気予報 http://weather.yahoo.co.jp/weather/jp/13/4410.html 2005 年 11 月 24 日のスケジュール https://example.com/schedule/20051124 新花巻駅の写真 http://www.flickr.com/photos/60043209@N00/6337155/ Dijkstra 著 ” Go To Statement Considered Harmful” http://www.acm.org/classics/oct95/ 僕の最近のブックマーク http://del.icio.us/yohei 14. リソース (3/3) 状態 リソースは状態 (state) を持つ 時間や条件とともに内容が変化する可能性がある 「 リソースの意味 」は時間や条件によらず不変である REST はリソースの representational state を transfer する 東京の明日の天気予報 (Resource) Receiver 時間による変化 晴れ 雨 1 月 5 日 AM ( 明日は晴れそう ) 1 月 5 日 PM ( 明日は雨っぽい ) 左から右に転送 ある時点におけるリソースの状態の具象的な表現 15. 余談: リソース == オブジェクト? オブジェクトとリソースは、ちょっと違う 利用 Consumer Object Interface 転送 Consumer Resource Uniform Interface http://www.markbaker.ca/2002/09/Blog/2004/10/29#2004-10-protocols REST のリソースモデリングをするときに OO の考え方が邪魔になることがある、かもしれない 16. 質問 リソースの URI を与えられたら何をしますか ? 東京の天気予報 http://weather.yahoo.co.jp/weather/jp/13/4410.html 2005 年 11 月 24 日のスケジュール https://example.com/schedule/20051124 新花巻駅の写真 http://www.flickr.com/photos/60043209@N00/6337155/ Dijkstra 著 ” Go To Statement Considered Harmful” http://www.acm.org/classics/oct95/ 僕の最近のブックマーク http://del.icio.us/yohei これ 17. URI の貼り付け == リソースの表現の取得 URI があったらブラウザのアドレス欄に入れてみる これを REST 的に見ると URI (= リソースの識別子 ) を使って リソースのその時点での 状態の表現 を HTTP GET で取得 している ネットサーフィン(死語)も本質的には同じ リンククリックやフォーム入力をトリガーに、リソースのある状態の表現から(別の)リソースのある状態の表現に移る どんなリソースの URI でもアドレス欄に入力(HTTP GET)できるのがすごいところ! 天気予報でも写真でも論文でも、 HTML でも PNG でも SWF でも なぜどんなリソースでも取得できるのか? リソースを操作するインターフェースが 統一 されているから 18. 統一インターフェース (Uniform interface) REST を構成する超重要なスタイルの一つ HTML を取得するのが GET_HTML で、PDF を取得するのが GET_PDF だったら、今の Web はどうなっていたでしょう? 統一されるのは コンポーネント 間のインターフェース ブラウザ | プロクシ | リバースプロクシ | サーバ リソースを識別する統一的な識別子の存在 URI 全てのリソースに適用できる洗練されたオペレーション (CRUD) GET リソースの取得 (Retrieve) PUT リソースの更新 (Update) DELETE リソースの削除 (Delete) POST リソースの作成 (Create …だけではない) 注意: この四つは特に重要。でも四つに限定しているわけではない 19. リンクをたどる -- ハイパーメディア A.html のリンクをクリックして B.html へ移動 A というリソースの表現から B というリソースの表現へ移動 クライアントのアプリケーションの状態が A から B になる リソース同士は単純に URI と HTTP ( リンク ) で結びついている 実はこれはすごいこと 中央リンク管理 サーバや ローカル リンク管理が必要ない URI さえあれば HTTP でリソースを操作できるので、アプリケーション連携がとても簡単 いわゆる 疎結合 の実現 拡張性もあるよ! 20. ステートレス重要 ステートレス = 状態なし メッセージ間のコミュニケーション 状態がない 前のリクエストで ×× だったから、次のリクエストには○○で答える、という実装にしないですむ サーバ側でセッション管理しなくてよい 計算機リソースを解放できるので、 スケーラビリティ が向上 ステートレスであるためには、リクエストメッセージは 自己記述的 である必要がある Host ヘッダ、キャッシュ情報、認証情報、など クッキーや url-rewriting での セッション管理 は NG 21. 22. REST で Web サービス Atom Publishing Protocol っぽい例 による Blog 編集 リソースモデル エントリ (/entry/*): 各記事 GET 記事の取得 PUT 記事の更新 DELETE 記事の削除 エントリリスト (/entlylist): 記事一覧 GET 一覧の取得 POST 新記事の作成 /entrylist 日記一覧 /entry/0 REST 入門 /entry/1 てゆーか… /entry/2 ツイてる ! /entry/3 晩ご飯は… 23. エントリ一覧の取得 HTTP GET GET /entrylist HTTP/1.1 Host: example.com X-WSSE: UsernameToken… HTTP/1.1 200 OK Content-Type: application/atom+xml <feed> <title>yohei-y:weblog</title> <entry> <link href=“/entry/0” /> </entry> <entry> <link href=“/entry/1” /> </entry> … </feed> 各エントリへのハイパーリンク リンクを辿る (href の URI を HTTP GET する ) と… 24. エントリの取得 HTTP GET GET /entry/0 HTTP/1.1 Host: example.com X-WSSE: UsernameToken… HTTP/1.1 200 OK Content-Type: application/atom+xml <entry> <title>REST 入門 </title> <published >2005-11-24T23:01:01</published> <content> <p>REST は … </p> </content> </entry> 25. エントリの更新 HTTP PUT HTTP/1.1 204 No Content PUT /entry/0 HTTP/1.1 Host: example.com Content-Type: application/atom+xml X-WSSE: UsernameToken… <entry> <title>REST 入門 </title> <content> <p>REST とは … </p> </content> </entry> 26. エントリの削除 HTTP DELETE HTTP/1.1 204 No Content DELETE /entry/0 HTTP/1.1 Host: example.com X-WSSE: UsernameToken… 27. エントリの新規作成 HTTP POST HTTP/1.1 201 Created Location: http://example.com/entry/5 POST /entrylsit HTTP/1.1 Host: example.com Content-Type: application/atom+xml X-WSSE: UsernameToken… <entry> <title>REST 入門 </title> <content> <p>REST とは … </p> </content> </entry> 新規作成されたリソースの URI 28. SOAP の場合 (クライアント側プログラム) // サービスエンドポイントの初期化 BlogService bs = new BlogService(“ http://example.com/servlet/blogservice” ); // セッション開始 String sid = bs.startSession( “yohei” , “ abc123” ); // エントリ一覧の取得 Entry[] list = bs.getEntryList(sid); String eid = list[0].getEntryId(); // 先頭エントリの取得 Entry item = bs.getEntry(sid, eid); // エントリの更新 Item.setContent(“ REST とは…” ); bs.putEntry(sid, eid, item); // エントリの削除 bs.deleteEntry(sid, eid); // エントリの追加 bs.postEntry(sid, item); 29. SOAP の場合 startSession POST /servlet/blogservice HTTP/1.1 Host: example.com Content-Type: application/soap+xml <s:Envelope> <s:Body> <m: startSession > <username>yohei</username> <passwd>hogehoge</passwd> </m: startSession > </s:Body> </s:Envelope> HTTP/1.1 200 OK Content-Type: application/soap+xml <s:Envelope> <s:Body> <m:startSessionResponse> <sid> 123 </sid> </m:startSessionResponse> </s:Body> </s:Envelope> セッション ID 30. SOAP の場合 getEntryList POST /servlet/blogservice HTTP/1.1 Host: example.com Content-Type: application/soap+xml <s:Envelope> <s:Body> <m: getEntryList > <sid>123</sid> </m: getEntryList > </s:Body> </s:Envelope> HTTP/1.1 200 OK Content-Type: application/soap+xml <s:Envelope> <s:Body> <m:getEntryListResponse> <entryList> <entry><eid> 1 </eid>…<entry> <entry><eid> 2 </eid>…</entry> </entryList> </m:getEntryListResponse> </s:Body> </s:Envelope> エントリ ID セッション ID 31. SOAP の場合 getEntry POST /servlet/blogservice HTTP/1.1 Host: example.com Content-Type: application/soap+xml <s:Envelope> <s:Body> <m: getEntry > <sid>123</sid> <eid> 1 </eid> </m: getEntry > </s:Body> </s:Envelope> HTTP/1.1 200 OK Content-Type: application/soap+xml <s:Envelope> <s:Body> <m:getEntryResponse> <entry> <title>REST 入門 </entry> <content>…</content> </entryList> </m:getEntryResponse> </s:Body> </s:Envelope> エントリ ID 32. SOAP の場合 putEntry POST /servlet/blogservice HTTP/1.1 Host: example.com Content-Type: application/soap+xml <s:Envelope> <s:Body> <m: putEntry > <sid>123</sid> <eid>1</eid> <entry> <title>REST 入門 </title> <content>…</content> </entry> </m: putEntry > </s:Body> </s:Envelope> HTTP/1.1 200 OK Content-Type: application/soap+xml <s:Envelope> <s:Body> <m:putEntryResponse /> </s:Body> </s:Envelope> 33. SOAP の場合 deleteEntry POST /servlet/blogservice HTTP/1.1 Host: example.com Content-Type: application/soap+xml <s:Envelope> <s:Body> <m: deleteEntry > <sid>123</sid> <eid>1</eid> </m: deleteEntry > </s:Body> </s:Envelope> HTTP/1.1 200 OK Content-Type: application/soap+xml <s:Envelope> <s:Body> <m:deleteEntryResponse /> </s:Body> </s:Envelope> 34. SOAP の場合 postEntry POST /servlet/blogservice HTTP/1.1 Host: example.com Content-Type: application/soap+xml <s:Envelope> <s:Body> <m: postEntry > <sid>123</sid> <entry> <title>REST 入門 </title> <content>…</content> </entry> </m: postEntry > </s:Body> </s:Envelope> HTTP/1.1 200 OK Content-Type: application/soap+xml <s:Envelope> <s:Body> <m:postEntryResponse> <eid>5</eid> </m:postEntryResponse> </s:Body> </s:Envelope> 35. REST (APP) と SOAP REST URI 1 URI 2 URI 3 entrylist entry entry HTTP GET HTTP GET HTTP PUT URI 1 End point HTTP POST HTTP POST HTTP POST getEntryList() getEntry(id) putEntry(entry) SOAP 36. REST と SOAP の違い SOAP では Web の世界 (HTTP/URI) と Web サービス世界が分かれている ×SOAP は全部 HTTP POST を使っている ×SOAP はサービスごとの 個別インターフェース がある ×SOAP メッセージには URI ( リンク ) が入ってない ×SOAP は HTTP を トランスポートプロトコル として使う なぜ Web と Web サービスで世界を分けるのがだめなのか キャッシュ、階層化によるスケーラビリティ、プロクシによるアクセスコントロール、・・・ 詳しくは各アーキテクチャスタイルで 37. 38. Client-Server (CS) ネットワークシステムで一番有名なスタイル 二つのコンポーネント サーバ: クライアントからのリクエストを待ちながらサービスを提供 クライアント: サービスにリクエストを投げ、レスポンスを受け取る 制約: ユーザインターフェースとデータストレージの分離 特徴 ○マルチプラットフォーム ○スケーラビリティ、サーバコンポーネントの単純化 server client 39. Client- Stateless -Server (CSS) ステートレス: サーバでセッション状態を持たない 制約: リクエストには 処理に必要な全ての情報 を含む 特徴 ○可視性: 一つのリクエストだけモニタリングすればよい ○信頼性: 部分的な失敗から回復 (最初からやり直さなくていい) ○スケーラビリティ: リソースをすぐに解放できる ×認証情報などを繰り返し送ることによるパフォーマンスの減少 server client client client 40. Client- Cache -Stateless-Server (C$SS) キャッシュ: 同じリクエストは再利用する 制約: レスポンスがキャッシュ可能かどうかラベル付け (Cache-Control, Expires, …)。キャッシュ可能なら、クライアント側で保持 特徴 ○サーバ、クライアントの 対話 を減らせる->パフォーマンス向上 ×信頼性の低下 (情報が更新されないケース) server client client client $ $ 41. 42. 43. REST = Uniform-Layered- Code-on-Demand -Client-Cache-Stateless-Server (ULCODC$SS) コードオンデマンド: クライアント側でコードをダウンロードして実行 (Flash, JavaScript) 実は REST では COD はオプション 特徴 ○クライアントを拡張できる ×可視性の低下 $ $ $ $ $ $ $ 44. ネットワークシステムのアーキテクチャスタイル CS CSS C$SS LC$SS LCODC$SS REST Data-flow Style Replication Style Peer-to-Peer Style Hierarchical Style Mobile Code Style PF UPF RR $ LS LCS RS RDA VM REV COD MA EBI C2 DO BDO U 45. ネットワークシステムのアーキテクチャスタイル Data-flow Style Pipe and Filter (PF) Uniform Pipe and Filter (UPF) Replication Style Replicated Repository (RR) Cache ($) Hierarchical Style Client-Server (CS) Layered System (LS) Layered Client-Server (LCS) Client-Stateless-Server (CSS) Client-Cache-Stateless-Server (C$SS) Layered-Client-Cache-Stateless-Server (LC$SS) Remote Session (RS) Remote Data Access (RDA) Mobile Code Style Virtual Machine (VM) Remote Evaluation (REV) Code on Demand (COD) Layered-Code-on-Demand-Client-Cache-Stateless-Server (LCODC$SS) Mobile Agent (MA) Peer-to-Peer Style Event-based Integration (EBI) C2 Distributed Object (DO) Brokered Distributed Object (BDO) Rest Uniform interface (U) 46. まとめ REST は WWW のアーキテクチャスタイル REST を知らずして Web 2.0 を語ることなかれ REST では リソース が大切 REST を構成する各制約の意味をきちんと把握しよう スペック だけみてても駄目 アーキテクチャスタイル重要 ソフトウェア技術者の 基本的スキル となる 47. 48.