概要
Rubyのフレームワークで簡単に軽いアプリケーションを作ることができる「sinatra」君で今回はWebAPIを作ろう!
Rubyのインストールから始めるsinatra
1.Rubyをインストール
2.Sinatraをインストール
3.Sinatraで文字を表示する
4.URLで取得したパラメータを使う
1.Rubyのインストール
私はwinマシーンなので http://rubyinstaller.org/ からインストールできるパッケージを実行しインストール。簡単。
# 2.Sinatoraをインストール
Windowsマシーンなのでコマンドプロンプトを起動。
ruby -v
を打ってrubyのバージョンが出ればとりあえずオッケー。
さぁsinatraをインストールしていきましょう。
gem install sinatra
gem install sinatra-reloader
長いですが頑張って待ちましょう。
エディタ
エディタは別になんでもいいですが僕はandroid以外はsublimeですべて解決させています。
3.Sinatraで文字を表示する
早速リクエストしちゃいましょう。
require "sinatra"
get '/' do
"Hello World!"
end
まず上をしゃきょって(写経しちゃって)ください。
require ' sinatra'
は単純にsinatra読みこんでね、といった具合
そして次に
get '/' do
"Hello World!"
end
「''」で囲まれた部分がリクエストされた場合↓をを返してね、といった具合です。
今回の場合だと「/]がリクエストされた場合["helloWorld"」を返してね、といった具合です。
sinatraは基本的に「ほにゃららされたらほにゃららする」が基本形です。
それをどんどん追加していくことで機能を実装していきます。
実行しよう
ruby helloWolrd.rb
を実行するとローカルにwebサーバーが立ち上がります。
確認方法は http://localhost:4567
です。今回はリクエストパラメータに / を指定しているのでhttp://localhost:4567/ でhttpリクエストしましょう!
sinatra/reloader
先ほどsinatraと一緒にダウンロードしたsnatra/reloaderの話をします。
sinatra/reloaderなんですが逆にない場合の話をします。
導入しない場合ソースを変更した際にいちいちサーバーをいちいち立て直さないと変更が適用されません。
例えば先ほどのコードに微修正をそのまましてみてください。(終了の仕方は ctr c です。)
require "sinatra"
get '/' do
"Hello World!"
end
get '/sasaki' do
"sasaki is good"
end
先ほどのにそのまま追加してみてもらえばいいんですがもしリアルタイムで反映されるとしたら http://localhost:4567/sasaki で 「sasaki is good」と表示されるべきなんですがエラーぽい画面が出るかと思います。
そんな時に上部のrequireに さらに追加することでリアルタイムに反映させることができます。
試しに一度やってみましょう(もう一度 ctr cでサーバーを落とし、)
require "sinatra"
require "sinatra/reloader"
get '/' do
"Hello World!"
end
get '/sasaki' do
"sasaki is good"
end
でサーバーを起動。
一旦 http://localhost:4567/sasaki でリクエスト。
おそらく 「sasaki is good」が表示されます。
エディタに戻って変更してみます。なんでもいいんですが、
require "sinatra"
require "sinatra/reloader"
get '/' do
"Hello World!"
end
get '/sasaki' do
"sasaki is gooddess"
end
などにしてサーバーを再起動せずに保存だけしてみましょう。
おそらく僕が瞬く間にいい人から女神に早変わりしたでしょう。
URLで取得したパラメータを使う
get '/hello/:name' do
"hello #{parmas[:name]}"
end
[:]以降は変数となり#{parmas[]}の中身の物が表示されることになります。
例えば今回 http://localhost:4567/hello/sasaki のパラメータを渡した場合
hello sasaki といったようにページに表示されます。
また、これはかなり省略することができます。
get '/hello/:name' do |a|
"hello #{a}"
end
といった具合です。
ワイルドカードを用いて二つ以上のパラメータを渡す場合
get '/from/*/to/*' do |f,l|
"from #{f} to #{l}"
end
http://localhost:4567/from/Y/to/Y
といった形で渡してあげましょう。
数字のみ渡したい場合正規表現を用いて、
rb
get %r{/users/([0-9]*)} do |i|
"users Id = #{i}"
end
このような感じでしょうか。