Upload
parrotstudio
View
1.918
Download
2
Embed Size (px)
DESCRIPTION
Gunma.web #6の資料 タイトルにあまり意味はないです
Citation preview
Signs;Gate 〜RESTfulなサイトの作り方〜
Present by ぱろっと(@parrot_studio)
for Gunma.web #6
2011/09/03
Profile:
T.Tachiki
ぱろっと
parrot_studio
Website:
parrot-studio.com
シンプルかつ
Web2.0っぽく作り直し
・ソーシャル系
・制作物
・過去のプレゼン等
詳しくはWebで
(´・ω・)っ
parrot-studio.com
Chapter 1: 自己反省のプログラマ
“Fragments of Stars”,
for RagnarokOnline Players with Astrology.
今回まずやるべきこと
“反省”
問題点1:
最近ネタに走りすぎ
(しかもすべり気味)
(今回も入れてるけど)
Σ(・ω・ノ)ノ
問題点2:
LT=5分にこだわりすぎて
詰め込みすぎ
前回の関数型とか端折りすぎ
(´-ω-)
それはまだしも、
一番(゚д゚)マズーなこと
問題点3:
理屈だけで「作ってない」
プログラマとしては
大問題です・・・
そこで、真面目に
新サイトをリリースしました
(´・ω・)っ
ROプレイヤーのための
占星学サイト
“Fragments of Stars”
http://rostars.jp
・名前と星座を元にハッシュ計算して、
“今日のおすすめ狩場”を提案
・今日のレア予報
・星座別プレイスタイル
・占星学コラム(準備中)
etc...
・・・それ、
なんて診○メーカー?
否!
ちゃんと星座ごとに狩場を選んでいる
(乙女座にここは合わないな・・・とか)
( ゚д゚)o彡゚
すいません、
基本は○断メーカーです
|ω・`)
それはさておき・・・
今回の開発で意識したこと
RESTful &
“Pure” Rails3
今日はこのお話
(´・ω・)っ
Chapter 2: 電網世界のプリンシプル
“REST” is principle of HTTP protocol,
on World Wide Web.
REST=Webの原則
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の実例とはいえない。(以下略)
よくわからない・・・
(´-ω-)
RESTの代表的特徴
リソースを表現する “URI”
&
洗練された “メソッド”
URI
Uniform Resource Identifier
URIとリソース(≒データモデル)が
1対1で対応
例:2010/8/5の群馬の気温
/temp/gunma/2010/8/5
#=> "36"
パラメータは表現方法を変えるだけ
(指し示すリソースは変わらない)
/temp/gunma/2010/8/5?source=ntv
#=> "56(-1)"
表現が変わる例:
メソッド
method:方法・方式
RESTのメソッドは
8種類しかない
POST - C(?)
GET - R
PUT - U
DELETE - D
その他、HEAD・OPTIONS等
メソッド+リソースで
リソースへの操作を表現
例:2010/8/5の気温を取得
GET /temp/gunma/2010/8/5
メソッド リソース
例:2010/8/5の気温を削除
DELETE /temp/gunma/2010/8/5
メソッド リソース
まさにAPI的
(`・ω・´) b
「API」を公開するなら
RESTに従うのが大事
でも、HTMLのフォームには
GET/POSTしかない
Σ(゚Д゚)ガーン
・Railsなど(パラメータで指定)
_method=PUT
・Googleなど(ヘッダで指定)
X-HTTP-Method-Override: PUT
まあ、フレームワークが
よしなにやってくれる
(`・ω・´)
curlコマンドはメソッドを正しく扱える
$ curl -X PUT http://hogehoge...
以上をふまえつつ・・・
「RESTfulに構築する」
ということ
“機能やリソースに
「名前=URI」を
定義してしまう”
例:今日のおすすめ狩場
POST /hunt/recommend
↓redirect
GET /hunt/40/6
RESTを意識せず
機能で表現された例
map_view.cgi?sign_id=6&map_id=40
・「機能」が主体になっている
・パラメータによって
「リソース」そのものが変わってしまう
なんかめんどくさい・・・
(´-ω-)
RESTfulに作ることの利点
1. 機能追加/連携しやすい
リソース+メソッドで機能が完結するので、
現在の状態と関係なく
他の機能を呼び出しやすい
2. URLの命名則がわかりやすい
=ユーザビリティが高い
どっちがわかりやすい?
p.miixii.jp/public/recent_page_feed.pl?page_id=1462
p.miixii.jp/public/recent/1462
3. ブックマークしやすい
4. SEO的に良い
5. Web2.0っぽい
6. カコ(・∀・)イイ!!
7. 彼女ができる
・・・すいません、
最後のは嘘です
|ω・`)
そんなREST原則を破った
有名なサイト
twitter.com/#!/parrot_studio
・# はフラグメントであってリソースではない
(Ajaxで処理するという都合でこういう表現に)
・#! はGoogleの都合で作られたルール
これが議論に・・・
Σ(゚Д゚;≡;゚д゚)
Chapter 3: 単純明快のルート
“Rails3” is more better, cool, sexy, RESTful than Rails2
(Ruby on )Rails:
Rubyの用途として最大級の
Webフレームワーク
Rails3 = Cool & Sexy
(*ノ∀ノ)
・Arel
・Sexy Validation
etc...
しかし、Rails2と3の最大の差
(だと私が感じたもの)
“routes”
routes:
ルーティングを定める
Railsの設定(ファイル)
Rails2 の routes
デフォルト:/controller/action/id
Controllerにactionを書けば動いちゃう
もうちょっと細かい指定
map.connect '/sign/:sign_id', :controller => ...
But...
・機能が主体になりやすい
・楽だけど、メソッドが不明確
(一目でわかりづらい)
Rails3 の routes
デフォルトはない
(コメントアウト)
# methodを明確にしている
get '/sign/:sign_id' => 'sign#show'
post '/hunt/recommend' => 'hunt#recommend'
# /hunt/recommend を「GET」しても404になる
基本的な定義@Rails3
明確!
∠( ゚д゚)/
このへん、Sinatraの影響もあるかも
get '/sign/:sign_id' do
# 処理
end
明確で簡潔な記述が
(設計という)思考に
影響を与える
「理想形」は連鎖する
Rails2 -> Sinatra -> Padrino
-> Merb
-> Rails3 -> Rails3.1 ->
-> others...
Last Chapter: 有形無人のレスポンサー
Epilogue and future.
言いたいことは
ただ一つ
“RESTfulに設計すると、
「みんな」幸せ”
(`・ω・´) b
わかりやすい
機能連携的に、
ユーザ的に、
API的に、
SEO的に
カコ(・∀・)イイ!!
Web技術者として
彼女ができる
ヽ(*゚д゚)ノ
※ただし、イケ
メンに限る
(´・ω・`)
参考
one more thing...
次回:
TwitterBOTの作り方(仮)
※予定は未定!!
まず完成させろ
щ(゚Д゚щ)
ありがとうございました
(`・ω・´)ノ