Output Diary

プログラミング × 読書 のアウトプットを発信しています

【Rails】ルーティング

 



 
ルーティングとは、
Railsアプリケーションのコントローラへ指示を出すための道筋 のことです。
 
 

ルートを構成する5つの要素

f:id:kina_kq:20210322070026p:plain

ルートの読み取り方

 
get '/login', to: 'sessions#new'
 
これは、
 
GETメソッドで、'/login'というURLに対してリクエストが来たら、
 
SessionsControllerのnewというアクションを呼び出すよー
といった意味になります。
 
 
post '/login', to: 'sessions#create'
 
これは、
 
POSTメソッドで、 '/login'というURLに対してリクエストが来たら、
 
SessionsControllerのcreateというアクションを呼び出すよー
といった意味になります。
 
 

定義の確認方法

 
rails routesというコマンドで確認することができます。
 
Prefix Verb URI Pattern Controller#Action
login GET /login(.:format) sessions#new
POST /login(.:format) sessions#create
 
こんな感じに出力されます。
 
 

RESTfulとは

 
Railsのルーティングは、RESTfulなインターフェースとして作られています。
 
RESTfulとはなんだっけー?って方に説明すると、
 
「REST」という用語は、「REpresentational State Transfer」の略です。
 
RESTの特徴は、
 
  • ステートレスであること
  • すべてを「リソース」で表す
  • リソースは名前を持つ
 
といった特徴をもっています。
 
 

ステートレスとは

 
ステートレスとは、
システムが現在持っているデータを保持せず入力によってのみ出力が決定される方式のことをいいます。
 
いわば、
そのページ離れると情報初期化しまっせーといった感じです。
 
反対に情報を保持し、入力とともに処理内容を反映させるような方式を
「ステートフル」といいます。情報を常に抱えているイメージですね。
 
 
 

RESTを生み出した人

 
 
ロイ・フィールディング(Roy Fielding)氏が2000年に提唱した設計原則になります。
 
・セッションなどの状態管理を行わず、やり取りされる情報はそれ自体で完結して解釈することができる
・情報を操作する命令の体系が予め定義・共有されている
・すべての情報は汎用的な構文で一意に識別される
・情報の一部として、別の状態や別の情報への参照を含めることができる

 

の4つの項目で構成されています。
 
 
■RESTFulなインターフェースにすることのメリット
 
なんといっても
美しくわかりやすいインターフェースを実現出来ます。
 
 
その他のメリットとしては、
・ほかの設計者にも理解しやすい
潜在的に外部のシステムと連携がしやすいといった等のメリットが挙げられます。
 
 

route.rbの構造化

 
構造化のためのメソッドとしては、
主にscope、namespace、controllerなどがあります。
 
 
■scope
ブロック内の定義にまとめて制約をかけます。
 
■namespace
URL階層、モジュール、URLパターン名に一括で一定の制約をかけます。scopeと違い一括なので「URL階層だけに制約をかけたいなー」といったことは出来ません。
 
■controller
コントローラーを指定します。