スポンサーリンク

2015年5月15日

SinatraでWebリクエストを取得してみる。

タイトル:SinatraでWebリクエストを取得してみる。

内容:
Sinatraで、formタグから送信されるWebリクエスト(HTTPメソッドとURL)を取得し表示する。

実施環境:
OS:Windows8.1
Ruby:v2.2.2
Sinatra:v1.4.6
Haml:v4.0.6

ディレクトリ構造:
作業ディレクトリ
|-sinatra_start.rb(ファイル)
|
|-views(ディレクトリ)
    |-index.haml(ファイル)
    |-request_print.haml(ファイル)

目次:

  1. Rubyソースコードを作成
  2. Hamlソースコードを作成
  3. 説明&実行


以前、以下の記事を見て頂いたことがある方は、
ソースコードに追記する形で実施すると楽です。
Hamlを使ってみた。

1.Rubyソースコードを作成
Rubyのソースコードは以下のように作成した。
sinatra_start.rb
# encoding: utf-8
# File Name: sinatra_test.rb
# Create Day is 2015/05/08
# Last Update Day is 2015/05/14
# Gem List
gem 'tilt', '1.4.1'
# Require List
require 'sinatra'
# sinatra reloader is classic type
require 'sinatra/reloader' if development?
require 'haml'
require 'tilt'
# 外部エンコーディングを変更
Encoding.default_external = "UTF-8"
get '/' do
@title = "Hello world!!"
@text = "Hello Haml!!"
haml :index
end
put '/request_print' do
@request_method = request.request_method
@request_url = request.url
@request_path = request.path
haml :request_print
end


2.Hamlソースコードを作成
Hamlソースコードは以下のように作成した。
index.haml
!!!
%html{:lang => "ja"}
%head
%title= @title
%body
%h1 #{@title}
%p= @text
%form{:method => "POST", :action => '/request_print'}
%input{:type => "hidden", :name => "_method", :value => "PUT"}
%input{:type => "submit", :value => "ページ遷移"}
view raw index.haml hosted with ❤ by GitHub


request_print.haml
!!!
%html{:lang => "ja"}
%head
%title Request Print
%body
%p= "method: #{@request_method}"
%p= "url: #{@request_url}"
%p= "path: #{@request_path}"


3.説明&実行

3.1
Ruby側の説明
「@~」の部分で、リクエストのパラメータを取得している。
「request.」で、リクエストオブジェクトにアクセスしている。
(Sinatraに用意されているためかなり楽だった...)

「haml: request_print」でrequest_print.hamlを指定。

「put '/request_print' do ~ end」は、
HTTPメソッドが「put」、パスが「/request_print」でこの部分が実行されるよう記述している。
request.request_method:HTTPメソッド
request.url:要求されたURL
request.path:要求されたパス

3.2
Haml側の説明
Web知識のgetとpost、各HTTPメソッドについては説明を割愛する。

formタグにて、「post」で「/request_print」を指定している。
しかし、hiddenで「_method」、「put」を指定している。
そのため、HTTPメソッドは「put」、パスは「/request_print」にて送られていることになる。

実際に、hiddenをコメントアウト等して実行すると、
HTTPメソッドが「post」、パスは「/request_print」で送られる。
その場合、サーバ側で受ける部分がないので、Sinatraのエラー(?)ページが表示されるが...

3.3
実行してみよう。
コマンド:ruby sinatra_start.rb

localhost:4567へアクセスし、ページ遷移のボタンを押下する。

request_printのページが表示され、
ボタンが押下された際のリクエストデータが表示されている。

以上!!

参考にさせて頂いたサイト
Sinatra本家(日本語訳)

個人的なコメント
今回、リクエストについて記事を書いたのには理由がある。
HTTPメソッドとか色々忘れたからだ...orz
なので、html側から送ってきたリクエストがどうなっているのかイメージができなくなっていた。
というわけで何が送られているか知るために今回の記事を書いたわけです。

当初、Hamlのファイル名は_(アンダーバー)を-(ハイフン)で作成していたが、
Rubyソースで参照するHamlファイルを指定するとArrgment Errorが発生した。
そのため、ファイル名を_(アンダーバー)に変更した。
(仕様...でいいのかな...?)

人気の投稿