Your SlideShare is downloading. ×
0
OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

OSC2008 Tokyo/Spring REST勉強夜会

4,863

Published on

Usagi&Maple Project で REST Web API を考えるための勉強会の補助資料 (ログ: http://usagi.mynets.jp/PUKIWIKI/index.php?OSC2008%20Tokyo%2FSpring%20REST%E5%8B%89%E5%BC%B7%E4%BC%9A%28%E5%A4%9C%E4%BC%9A%29)

Usagi&Maple Project で REST Web API を考えるための勉強会の補助資料 (ログ: http://usagi.mynets.jp/PUKIWIKI/index.php?OSC2008%20Tokyo%2FSpring%20REST%E5%8B%89%E5%BC%B7%E4%BC%9A%28%E5%A4%9C%E4%BC%9A%29)

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
4,863
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
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. OSC2008 Tokyo/Spring REST&TDD 勉強会メモ ( 開発者 SNS より ) Usagi & Maple Project + あるふぁ 2008/02/29 Fri 18:00-21:00
  • 2. REST キーワード目次 <ul><li>アーキテクチャスタイルとアーキテクチャ </li></ul><ul><li>リソース ー 状態と表現 </li></ul><ul><li>URI </li></ul><ul><li>リソース間接続 </li></ul><ul><li>操作 </li></ul>
  • 3. REST キーワード <ul><li>アーキテクチャスタイルとアーキテクチャ </li></ul><ul><ul><li>REST アーキテクチャスタイル </li></ul></ul><ul><ul><ul><li>Uniform- : 統一インタフェース Layered- : 多層化 Code-on-Demand- : クライアントコードの DL 実行 Client- : C/S のクライアント Cache- : キャッシュを活用可能 Stateless- : サーバはセッション状態と独立 Server : C/S のサーバ </li></ul></ul></ul><ul><ul><li>統一インターフェイス </li></ul></ul><ul><ul><ul><li>HTTP への直接的なマッピング </li></ul></ul></ul><ul><ul><li>ROA vs SOA </li></ul></ul><ul><ul><ul><li>RESTful Web Service vs SOAP/WS-* Web Services </li></ul></ul></ul>
  • 4. REST キーワード <ul><li>リソース ー 状態と表現 </li></ul><ul><ul><li>リソース </li></ul></ul><ul><ul><li>リソース状態とアプリケーション状態 </li></ul></ul><ul><ul><li>representational state </li></ul></ul><ul><ul><li>ステートフル / ステートレス </li></ul></ul><ul><ul><ul><li>※-> 負荷分散容易化 </li></ul></ul></ul><ul><ul><li>コンテントネゴシエーションによる表現の選択 </li></ul></ul><ul><li>URI </li></ul><ul><ul><li>URI = URL + URN </li></ul></ul><ul><ul><li>アドレス可能性 </li></ul></ul><ul><ul><li>リソースの階層分類 </li></ul></ul><ul><ul><ul><li>※-> サブシステム分割容易化 </li></ul></ul></ul><ul><ul><li>マトリクス URL </li></ul></ul>
  • 5. REST キーワード <ul><li>リソース間接続 </li></ul><ul><ul><li>ハイパーリンク </li></ul></ul><ul><ul><li>接続性 ( 到達可能性 ) </li></ul></ul><ul><li>操作 </li></ul><ul><ul><li>HEAD : メタデータ取得 </li></ul></ul><ul><ul><li>OPTIONS : 利用可能メソッド取得 </li></ul></ul><ul><ul><li>POST : リソース作成、他 </li></ul></ul><ul><ul><li>GET : リソース取得 </li></ul></ul><ul><ul><li>PUT : リソース更新 </li></ul></ul><ul><ul><li>DELETE : リソース削除 </li></ul></ul><ul><ul><li>安全性 : HEAD, OPTIONS, GET </li></ul></ul><ul><ul><li>べき等性 : HEAD, OPTIONS, GET, PUT, DELETE </li></ul></ul>
  • 6. 考えてみたいお題 <ul><li>ぼぶちんさん </li></ul><ul><ul><li>ユーザ管理 </li></ul></ul><ul><ul><ul><li>ユーザ一覧表示・登録・変更・削除 </li></ul></ul></ul><ul><ul><li>認証 </li></ul></ul><ul><ul><li>検索 </li></ul></ul><ul><ul><ul><li>ページング </li></ul></ul></ul><ul><li>つじくにさん </li></ul><ul><ul><li>日記か掲示板の入力投稿・確認・表示 </li></ul></ul>
  • 7. 設計手順概要 (Siena.’s) <ul><li>概念モデリングじゅーよー </li></ul><ul><ul><li>モデリングには唯一無二の正解なんて存在しない </li></ul></ul><ul><li>システムで扱うリソース群を特定 (OO 的に ) </li></ul><ul><li>リソースを階層的に分類 ( グラフ->木の展開 ) </li></ul><ul><li>作成済みリソースの GET での遷移を検討 </li></ul><ul><ul><li>オブジェクトグラフの残りのリンクの取捨選択 </li></ul></ul><ul><li>リソースに対する POST, PUT, DELETE の挙動の 意味付けを付加 (URI + メソッドを決定 ) </li></ul><ul><li>リソースの生成・更新・削除などの操作のために 不足している処理の追加先リソースを決定 </li></ul><ul><li>適切なものが無ければ操作割当用リソースを追加 </li></ul><ul><li>ぐるぐる ( 謎 ) </li></ul>
  • 8. URI 設計指針 (Siena.’s) <ul><li>可読性 vs 実現容易性 / 単純性 </li></ul><ul><ul><li>/user/siena vs /user/413 </li></ul></ul><ul><li>固定 URI vs 問合せ URI </li></ul><ul><ul><li>固定 URI : 直接的かつ永続感がある </li></ul></ul><ul><ul><li>問合せ URI : 条件で絞込む感 </li></ul></ul><ul><ul><ul><li>問合せパラメータはリソース名の一部でなく、 HTTP メソッドを拡張するパラメータとみなすべき </li></ul></ul></ul><ul><li>リソースには固有の固定 URI を (mod_rewrite などで ) </li></ul><ul><li>一時リソースの URI </li></ul><ul><ul><li>セッションを区別できるような URI </li></ul></ul><ul><li>URI の長さ </li></ul><ul><ul><li>仕様では無制限 , 時として実装 / サーバ設定が制約に </li></ul></ul>
  • 9. 考えてみたいお題 (Siena.) <ul><li>クッキーを使わないセッション管理 </li></ul><ul><ul><li>URI にセッション ID を含めて一時リソースを作成 </li></ul></ul><ul><li>プレビューの実現方法 </li></ul><ul><ul><li>編集用リソースを作成 </li></ul></ul><ul><ul><li>現状確認用表示と編集用フォームをまとめて提供 </li></ul></ul><ul><ul><li>編集元リソースの有無で実現方法が異なる </li></ul></ul><ul><li>複合処理の実現方法・要求先 URI (POST and DELETE とか ) </li></ul><ul><ul><li>処理はパラメータで分岐しない方が良い ? </li></ul></ul><ul><ul><li>複合処理をするための受け口を別に用意した方が、 API が単純かつ再利用性が高い </li></ul></ul><ul><li>アクセス制御 </li></ul><ul><ul><li>{ 主体 , 対象 , 方法 } := { ユーザ ID,URI,HTTP メソッド } </li></ul></ul>
  • 10. <ul><li>リソースの状態で、公開 / 非公開を切り替える </li></ul><ul><li>プレビューなし、再編集なし </li></ul>編集用リソースを使わない場合 廃棄稿 ( 非公開 ) 草稿 ( 非公開 ) 記事 ( 公開 ) POST /article DELETE /article/1 PUT /article/1 ( ドラフト修正 ) PUT /article/1 ( 記事確定 ) DELETE /article/1 PUT /article/1 ( 廃棄準備 )
  • 11. 改稿 /article/2/update/3 記事 /article/2 [ 保存・プレビュー ] POST /article/draft -> GET /article/draft/6 記事一覧 /article [ 保存・再表示 ] PUT /article/draft/6 [ 削除決定 ] DELETE /article/2 -> GET /article [ 更新・削除 ] POST /article/2 -> GET /article/2/update/3 [ キャンセル ] DELETE /article/2/update/3 -> GET /article/2 記事データから 仮想的に生成 [ プレビュー ] PUT /article/2/update/3 [ 投稿 ] POST /article -> GET /article/2 草稿一覧 /article/draft [ 草稿一覧 ] GET /article/draft [ 更新決定 ] PUT /article/2 [ 投稿決定 ] POST /article/draft/6 -> GET /article/2 /article/draft/6 を削除 [ 閲覧 ] GET /article/2 [ 編集・投稿 ] GET /article/draft/6 草稿 /article/draft/6 [ 保存せずに終了 ] GET /article/draft 記事作成 /article/form [ 記事作成 ] GET /article/form [ 削除 ] DELETE /article/draft/6 -> GET /article/draft 記事一覧 /article スクリプトなど POST GET PUT DELETE
  • 12. 改稿 /article/2/update/3 記事 /article/2 [ 保存・プレビュー ] POST /article/draft -> GET /article/draft/6 記事一覧 /article [ 保存・再表示 ] PUT /article/draft/6 [ 削除決定 ] DELETE /article/2 -> GET /article [ 更新・削除 ] POST /article/2 -> GET /article/2/update/3 [ キャンセル ] DELETE /article/2/update/3 -> GET /article/2 記事データから 仮想的に生成 [ プレビュー ] PUT /article/2/update/3 [ 投稿 ] POST /article -> GET /article/2 草稿一覧 /article/draft [ 草稿一覧 ] GET /article/draft [ 更新決定 ] PUT /article/2 [ 投稿決定 ] POST /article -> GET /article/2 /article/draft/6 を削除 [ 閲覧 ] GET /article/2 [ 編集・投稿 ] GET /article/draft/6 草稿 /article/draft/6 [ 保存せずに終了 ] GET /article/draft 記事作成 /article/form [ 記事作成 ] GET /article/form [ 削除 ] DELETE /article/draft/6 -> GET /article/draft 記事一覧 /article スクリプトなど POST GET PUT DELETE

×