【Sinatra】ルーティング


こちらの続きで、
https://qiita.com/gussan-dayo/items/00b7b5a84cb67c8376ae
ルーティングにいて見ていきます。

※参考
http://sinatrarb.com/intro.html

Routes

In Sinatra, a route is an HTTP method paired with a URL-matching pattern. Each route is associated with a block:

Sinatraでは、ルートはURLマッチングパターンとペアのHTTPメソッドです。それぞれのルートはブロックと結び付けられています。と書かれています。

get '/' do
  .. show something ..
end

post '/' do
  .. create something ..
end

put '/' do
  .. replace something ..
end

patch '/' do
  .. modify something ..
end

delete '/' do
  .. annihilate something ..
end

options '/' do
  .. appease something ..
end

link '/' do
  .. affiliate something ..
end

unlink '/' do
  .. separate something ..
end

最初にマッチしたルートの情報が呼び出されます。

例えば、

myapp.rb
require 'sinatra'

get '/' do
  'Hello world!'
end

では http://localhost:4567/ 
を開くと画面にHello world!と表示されます。

ルート情報の追記

ルート情報を追記してみます。

myapp.rb
# myapp.rb
require 'sinatra'

get '/' do
  'Hello world!'
end

get '/hello/' do
    'Hello '
end

次に、http://localhost:4567/hello
にアクセスしてみます。
おっとエラーが出ました。

http://localhost:4567/hello/
のように、helloの後に / が抜けていたのが原因でした。

次に、

myapp.rb
# myapp.rb
require 'sinatra'

get '/' do
  'Hello world!'
end

get '/hello' do
    'Hello '
end

として、サーバをもう一度立ち上げ直し、http://localhost:4567/hello
に接続すると、うまく接続出来ました。

名前付きルート

名前付きのルート情報について見てみましょう。

myapp.rb
require 'sinatra'

get '/' do
  'Hello world!'
end

get '/hello/:name' do
    "Hello #{params['name']}!"
end

get '/hello/:name' doのように[:変数]とすることで、URLに任意の変数を持たせることが出来ます。
paramsハッシュでnameを取得することが出来ます。

http://localhost:4567/hello/ruby
に接続すると、nameにrubyという文言が入ります。

また、こう記述することも出来ます。

myapp.rb
require 'sinatra'

get '/' do
  'Hello world!'
end

get '/hello/:name' do
    "Hello #{params['name']}!"
end

get '/hello2/:name2' do |n|
    "Hello #{n}!"
end

ここでは、新しくルート情報を追記しました。

繰り返し構文の変数を使用しても、ルートを表示出来るます。

ワイルドカード

ワイルドカードもルーティングに含めることが出来ます。

myapp.rb
require 'sinatra'

get '/say/*/to/*' do
    # matches /say/hello/to/world
    params['splat'] # => ["hello", "world"]
end

get '/download/*.*' do
    # matches /download/path/to/file.xml
    params['splat'] # => ["path/to/file", "xml"]
end

こちらもparams['splat']でルート情報を取得することが出来ます。

正規表現にもマッチさせることもできます。

myapp.rb
get /\/hello\/([\w]+)/ do
  "Hello, #{params['captures'].first}!"
end

こちらも繰り返し構文で表現することが出来ます。

myapp.rb
get %r{/hello/([\w]+)} do |c|
  "Hello, #{c}!"
end

まとめ

ルーティング用のファイル名っていまのところ何でも?良さそうです。
わくわくしますね~