signs;gate - restfulなサイトの作り方 (gunma.web #6 2011/09/03)

111
Signs;Gate RESTfulなサイトの作り方〜 Present by ぱろっと(@parrot_studio) for Gunma.web #6 2011/09/03

Upload: parrotstudio

Post on 05-Jul-2015

1.918 views

Category:

Technology


2 download

DESCRIPTION

Gunma.web #6の資料 タイトルにあまり意味はないです

TRANSCRIPT

Page 1: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

Signs;Gate 〜RESTfulなサイトの作り方〜

Present by ぱろっと(@parrot_studio)

for Gunma.web #6

2011/09/03

Page 2: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

Profile:

T.Tachiki

ぱろっと

parrot_studio

Page 3: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

Website:

parrot-studio.com

Page 4: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

シンプルかつ

Web2.0っぽく作り直し

Page 5: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

・ソーシャル系

・制作物

・過去のプレゼン等

Page 6: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

詳しくはWebで

(´・ω・)っ

parrot-studio.com

Page 7: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

Chapter 1: 自己反省のプログラマ

“Fragments of Stars”,

for RagnarokOnline Players with Astrology.

Page 8: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

今回まずやるべきこと

Page 9: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

“反省”

Page 10: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

問題点1:

最近ネタに走りすぎ

(しかもすべり気味)

Page 11: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

(今回も入れてるけど)

Σ(・ω・ノ)ノ

Page 12: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

問題点2:

LT=5分にこだわりすぎて

詰め込みすぎ

Page 13: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

前回の関数型とか端折りすぎ

(´-ω-)

Page 14: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

それはまだしも、

一番(゚д゚)マズーなこと

Page 15: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

問題点3:

理屈だけで「作ってない」

Page 16: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

プログラマとしては

大問題です・・・

Page 17: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

そこで、真面目に

新サイトをリリースしました

(´・ω・)っ

Page 18: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

ROプレイヤーのための

占星学サイト

Page 19: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

“Fragments of Stars”

http://rostars.jp

Page 20: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)
Page 21: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

・名前と星座を元にハッシュ計算して、

“今日のおすすめ狩場”を提案

・今日のレア予報

・星座別プレイスタイル

・占星学コラム(準備中)

etc...

Page 22: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

・・・それ、

なんて診○メーカー?

Page 23: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

否!

Page 24: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

ちゃんと星座ごとに狩場を選んでいる

(乙女座にここは合わないな・・・とか)

( ゚д゚)o彡゚

Page 25: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

すいません、

基本は○断メーカーです

|ω・`)

Page 26: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

それはさておき・・・

Page 27: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

今回の開発で意識したこと

Page 28: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

RESTful &

“Pure” Rails3

Page 29: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

今日はこのお話

(´・ω・)っ

Page 30: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

Chapter 2: 電網世界のプリンシプル

“REST” is principle of HTTP protocol,

on World Wide Web.

Page 31: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

REST=Webの原則

Page 32: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

Wikipedia:REST Representational State Transfer(REST) は、ウェブのような分散ハイパーメディアシステムのためのソフトウェアアーキテク

チャのスタイルのひとつである。この語は2000年に、HTTPプロトコル規格の主要著者の一人であるRoy Fieldingが、ウェブにつ

いて書いた博士論文で初めて現れ、ネットワーキングコミュニティの中ですぐに広く使われることになった。

RESTは、初めはアーキテクチャの原則と制約の集まり(後述)を指していたが、次第に、XMLやHTTPを使った簡易なウェブ

ベースのインターフェイスのうち、WebサービスのSOAPプロトコルのような MEP(Message Exchange Pattern; SOAPノード相互

のメッセージ交換のパターンを確立するための雛型)ベースの特別な抽象化をしないもののことを、大まかに意味する用語と

して使われるようになった。RESTは次に述べるように2つのやや異なる意味で使われている。

FieldingのRESTアーキテクチャスタイルの原則に合わせたWebサービスシステム。

RPCスタイルに合わせた簡易な XML+HTTP インターフェイスを採用したシステム(SOAPは使わない) 。

RESTはこのように2つのやや異なる意味で使われているため、技術的な議論の中で混乱を引き起こすことがある。 ただし、

RPCはRESTの実例とはいえない。(以下略)

Page 33: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

よくわからない・・・

(´-ω-)

Page 34: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)
Page 35: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

RESTの代表的特徴

Page 36: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

リソースを表現する “URI”

&

洗練された “メソッド”

Page 37: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

URI

Uniform Resource Identifier

Page 38: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

URIとリソース(≒データモデル)が

1対1で対応

Page 39: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

例:2010/8/5の群馬の気温

/temp/gunma/2010/8/5

#=> "36"

Page 40: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

パラメータは表現方法を変えるだけ

(指し示すリソースは変わらない)

Page 41: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

/temp/gunma/2010/8/5?source=ntv

#=> "56(-1)"

表現が変わる例:

Page 42: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

メソッド

method:方法・方式

Page 43: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

RESTのメソッドは

8種類しかない

Page 44: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

POST - C(?)

GET - R

PUT - U

DELETE - D

その他、HEAD・OPTIONS等

Page 45: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

メソッド+リソースで

リソースへの操作を表現

Page 46: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

例:2010/8/5の気温を取得

GET /temp/gunma/2010/8/5

メソッド リソース

Page 47: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

例:2010/8/5の気温を削除

DELETE /temp/gunma/2010/8/5

メソッド リソース

Page 48: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

まさにAPI的

(`・ω・´) b

Page 49: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

「API」を公開するなら

RESTに従うのが大事

Page 50: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

でも、HTMLのフォームには

GET/POSTしかない

Σ(゚Д゚)ガーン

Page 51: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

・Railsなど(パラメータで指定)

_method=PUT

・Googleなど(ヘッダで指定)

X-HTTP-Method-Override: PUT

Page 52: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

まあ、フレームワークが

よしなにやってくれる

(`・ω・´)

Page 53: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

curlコマンドはメソッドを正しく扱える

$ curl -X PUT http://hogehoge...

Page 54: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

以上をふまえつつ・・・

Page 55: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

「RESTfulに構築する」

ということ

Page 56: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

“機能やリソースに

「名前=URI」を

定義してしまう”

Page 57: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

例:今日のおすすめ狩場

POST /hunt/recommend

↓redirect

GET /hunt/40/6

Page 58: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

RESTを意識せず

機能で表現された例

Page 59: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

map_view.cgi?sign_id=6&map_id=40

Page 60: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

・「機能」が主体になっている

・パラメータによって

「リソース」そのものが変わってしまう

Page 61: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

なんかめんどくさい・・・

(´-ω-)

Page 62: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

RESTfulに作ることの利点

Page 63: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

1. 機能追加/連携しやすい

Page 64: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

リソース+メソッドで機能が完結するので、

現在の状態と関係なく

他の機能を呼び出しやすい

Page 65: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

2. URLの命名則がわかりやすい

=ユーザビリティが高い

Page 66: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

どっちがわかりやすい?

p.miixii.jp/public/recent_page_feed.pl?page_id=1462

p.miixii.jp/public/recent/1462

Page 67: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

3. ブックマークしやすい

Page 68: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

4. SEO的に良い

Page 69: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

5. Web2.0っぽい

Page 70: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

6. カコ(・∀・)イイ!!

Page 71: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

7. 彼女ができる

Page 72: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

・・・すいません、

最後のは嘘です

|ω・`)

Page 73: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

そんなREST原則を破った

有名なサイト

Page 74: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)
Page 75: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

twitter.com/#!/parrot_studio

Page 76: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

・# はフラグメントであってリソースではない

(Ajaxで処理するという都合でこういう表現に)

・#! はGoogleの都合で作られたルール

Page 77: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

これが議論に・・・

Σ(゚Д゚;≡;゚д゚)

Page 78: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

Chapter 3: 単純明快のルート

“Rails3” is more better, cool, sexy, RESTful than Rails2

Page 79: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

(Ruby on )Rails:

Rubyの用途として最大級の

Webフレームワーク

Page 80: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

Rails3 = Cool & Sexy

(*ノ∀ノ)

Page 81: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

・Arel

・Sexy Validation

etc...

Page 82: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

しかし、Rails2と3の最大の差

(だと私が感じたもの)

Page 83: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

“routes”

Page 84: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

routes:

ルーティングを定める

Railsの設定(ファイル)

Page 85: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

Rails2 の routes

Page 86: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

デフォルト:/controller/action/id

Controllerにactionを書けば動いちゃう

Page 87: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

もうちょっと細かい指定

map.connect '/sign/:sign_id', :controller => ...

Page 88: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

But...

・機能が主体になりやすい

・楽だけど、メソッドが不明確

(一目でわかりづらい)

Page 89: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

Rails3 の routes

Page 90: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

デフォルトはない

(コメントアウト)

Page 91: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

# methodを明確にしている

get '/sign/:sign_id' => 'sign#show'

post '/hunt/recommend' => 'hunt#recommend'

# /hunt/recommend を「GET」しても404になる

基本的な定義@Rails3

Page 92: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

明確!

∠( ゚д゚)/

Page 93: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

このへん、Sinatraの影響もあるかも

get '/sign/:sign_id' do

# 処理

end

Page 94: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

明確で簡潔な記述が

(設計という)思考に

影響を与える

Page 95: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

「理想形」は連鎖する

Rails2 -> Sinatra -> Padrino

-> Merb

-> Rails3 -> Rails3.1 ->

-> others...

Page 96: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

Last Chapter: 有形無人のレスポンサー

Epilogue and future.

Page 97: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

言いたいことは

ただ一つ

Page 98: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

“RESTfulに設計すると、

「みんな」幸せ”

(`・ω・´) b

Page 99: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

わかりやすい

機能連携的に、

ユーザ的に、

API的に、

SEO的に

Page 100: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

カコ(・∀・)イイ!!

Web技術者として

Page 101: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

彼女ができる

ヽ(*゚д゚)ノ

Page 102: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

※ただし、イケ

メンに限る

Page 103: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

(´・ω・`)

Page 104: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

参考

Page 105: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)
Page 106: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

one more thing...

Page 107: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)
Page 108: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

次回:

TwitterBOTの作り方(仮)

Page 109: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

※予定は未定!!

Page 110: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

まず完成させろ

щ(゚Д゚щ)

Page 111: Signs;Gate - RESTfulなサイトの作り方 (Gunma.web #6 2011/09/03)

ありがとうございました

(`・ω・´)ノ