LoginSignup
3
0

More than 3 years have passed since last update.

【Sinatra】ルーティング

Posted at

こちらの続きで、
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
にアクセスしてみます。
おっとエラーが出ました。

スクリーンショット (52).png

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

まとめ

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

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0