/ ̄ ̄ ̄\
/ ─ ─ \
/ (●) (●) \. Rack アプリケーションはリクエスト(Hash)を受け取って、
| (__人__) | レスポンス(Array)を返すのはわかったお。
\ ` ⌒´ /
/ \
____
/ \
/ ─ ─\
/ (●) (●) \ Hash や Array だとコード書くの大変だお?
| (__人__) |
/ ∩ノ ⊃ /
( \ / _ノ | |
.\ “ /__| |
\ /___ /
/ ̄ ̄\
/ _ノ \
| ( ●)(●)
| (__人__)
| ` ⌒´ノ お前にしてはもっともなことを言ったな。
| } 確かに、リクエストを Hash のままで処理したり、
ヽ } レスポンス用のArrayを作成するコードは面倒になりがちだ。
ヽ、.,__ __ノ
_, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、
/;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_
丿;;;;;;;;;;;:::::i::::::::::::::/:::::::\゙'' ゙||i l\>::::゙'ー、
. i;;;;;;;;;;;;;;;;;;;;;;|::::::::::::::\::::::::::\ .||||i|::::ヽ::::::|:::!
/;;;;;;;;;;;;;;;;;;;;;;;;!:::::::::::::::::::\:::::::::ヽ|||||:::::/::::::::i:::|
;;;;;;;;;;;;;;;;;;;;;;;;;;|;;;;:::::::::::::::::::::::\:::::゙、|||:::/::::::::::|:::
____
/_ノ ' ヽ_\
/(≡) (≡)\
/::::::⌒(__人__)⌒::::: \ そんなに褒めると照れるお。
| |r┬-| |
\ `ー'´ /
/ ̄ ̄\
/ _ノ \
| ( ●)(●)
| (__人__)
| ` ⌒´ノ 褒めてないんだがな。…まあいい。
| } Rack にはリクエストやレスポンスの処理を少しだけ
ヽ } 楽にするクラスがある。 Rack::Request と Rack::Response だ。
ヽ、.,__ __ノ これらを使って先日のサンプルを書き変えると次のようになる。
_, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、
/;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_
丿;;;;;;;;;;;:::::i::::::::::::::/:::::::\゙'' ゙||i l\>::::゙'ー、
. i;;;;;;;;;;;;;;;;;;;;;;|::::::::::::::\::::::::::\ .||||i|::::ヽ::::::|:::!
/;;;;;;;;;;;;;;;;;;;;;;;;!:::::::::::::::::::\:::::::::ヽ|||||:::::/::::::::i:::|
;;;;;;;;;;;;;;;;;;;;;;;;;;|;;;;:::::::::::::::::::::::\:::::゙、|||:::/::::::::::|:::
require "rack/request"
require "rack/response"
class SampleApp
def call(env)
request = Rack::Request.new(env)
response = Rack::Response.new do |r|
r.status = 200
r["Content-Type"] = "text/html"
r.write "<html><body>#{request.request_method}</body></html>"
end
response.finish
end
end
/ ̄ ̄\
/ _ノ \
| ( ●)(●)
| (__人__)
| ` ⌒´ノ Rack::Request や Rack::Response に
| } どんなメソッドがあるかは、
ヽ } 下記のページを参照しろ。
ヽ、.,__ __ノ
_, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、
/;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_
丿;;;;;;;;;;;:::::i::::::::::::::/:::::::\゙'' ゙||i l\>::::゙'ー、
. i;;;;;;;;;;;;;;;;;;;;;;|::::::::::::::\::::::::::\ .||||i|::::ヽ::::::|:::!
/;;;;;;;;;;;;;;;;;;;;;;;;!:::::::::::::::::::\:::::::::ヽ|||||:::::/::::::::i:::|
;;;;;;;;;;;;;;;;;;;;;;;;;;|;;;;:::::::::::::::::::::::\:::::゙、|||:::/::::::::::|:::
___
/⌒ ⌒\
/ (●) (●) \ リクエストからデータを取り出すのが
/::::::⌒(__人__)⌒::::: \ メソッド呼び出しで書けたお!
| |r┬-| | レスポンスの組み立てがブロックで書けたお!
\ `ー'´ /
/ ̄ ̄\
/ _ノ \
| ( ●)(●)
| (__人__)
| ` ⌒´ノ まぁ、Rails や Sinatra といった
| } Web アプリケーションフレームワークを使って開発するなら、
ヽ } Rack::Request や Rack::Response を拡張した
ヽ、.,__ __ノ クラスを使うことになるだろうけどな。
_, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、
/;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_
丿;;;;;;;;;;;:::::i::::::::::::::/:::::::\゙'' ゙||i l\>::::゙'ー、
. i;;;;;;;;;;;;;;;;;;;;;;|::::::::::::::\::::::::::\ .||||i|::::ヽ::::::|:::!
/;;;;;;;;;;;;;;;;;;;;;;;;!:::::::::::::::::::\:::::::::ヽ|||||:::::/::::::::i:::|
;;;;;;;;;;;;;;;;;;;;;;;;;;|;;;;:::::::::::::::::::::::\:::::゙、|||:::/::::::::::|:::