LoginSignup
27
20

More than 3 years have passed since last update.

Rails ルーティングの基礎とRESTful

Last updated at Posted at 2019-08-04

はじめに

Railsのルーティングについて調べましたので、まとめようと思います。
Railsのルーティングについて一気にまとめてしまうと長くなってしまいますので、
今回は

  • Railsのルーティングの基礎
  • RESTful

に絞りました。

ルーティングの基礎

ルーティングとは

リクエストのURLに応じて、どの処理を実行するかを決定するしくみを指します。
Railsの場合、次の手順で実行するコントローラとアクションを決定します。

  1. クライアントがリクエストを送る
  2. パスを解析し、ルート定義を検索する
  3. 検索されたルート定義に基づいて対応するコントローラ、アクションを呼び出す

ルーティングの設定

ルーティングの設定は/config/routes.rbに定義します。

routes.rb
Rails.application.routes.draw do
  get 'members' => 'members#index'
end

これは
リクエストのURLの末尾がmembersだった場合 =>
membersコントローラのindexアクションを呼び出す

と定義しています。

ルーティングとコントローラの設定例

例えば、次のコントローラとアクションを定義して

members_controller.rb
class MembersController < ApplicationController
  def index
  end
end

次のルーティングを定義して

routes.rb
Rails.application.routes.draw do
  get 'members' => 'members#index'
end

次のリクエストを送信すると
※ http://localhost:3000/の部分はホスト名で、Railsのデフォルトポートは3000です。

http://localhost:3000/members

Membersコントローラのindexアクションが呼ばれます。

RESTful

Railsのルート設計

RESTの性質を持つルート設計のことをRESTfulと言います。
Railsのルート設計はRESTfulです。
※ RESTfulでないルート設計も可能です。しかしRailsにはRESTfulなルート設計が前提の機能も存在するため、注意が必要です。

RESTとは

以下の原則に沿った Webサービスの設計モデルを指します。

  1. セッションなどの状態管理を行わない
  2. 情報を操作する命令が体系化されて定義・共有される
  3. 情報に対して汎用的な構文で一意に識別される
  4. 情報に、別の情報や別の状態へのリンクを含めることができる

一つ一つ具体的にまとめてみます。

セッションなどの状態管理を行わない

クライアントの送信する情報には、全てのやりとりが含まれています。
サーバはクライアントの状態を保持しません。
このようなクライアントとサーバのやりとりはステートレスと言われます。
逆に状態を保持する場合はステートフルと言われます。

例としてECサイトで買い物する場合

ステートフルの場合
1. 商品Aをカートに入れる
2. 商品Bをカートに入れる
3. カート内の商品を購入

ステートレスの場合
1. 商品Aをカートに入れる
2. 商品Aと商品Bをカートに入れる
3. カート内の商品を購入

ステートフルの場合、サーバ側でカートに入れた商品の状態を保持しているため、クライアントは追加する商品の情報のみ送信します。
ステートレスの場合、サーバ側でカートの状態を保持していないため、クライアントは送信する情報にすべてのやりとりを含める必要があります。

情報を操作する命令が体系化されて定義・共有される

なに(リソース)に対してどうするか(HTTPメソッド)でルート定義を設定すること
HTTPメソッドとはクライアントがサーバに対して出す依頼のことで、主に次のようなものがあります。

  • GET:取得
  • POST:作成
  • PUT:更新
  • PATCH:部分更新
  • DELETE:削除

リソースとはユーザ情報や画像データなど、情報全般のことを指します。

例えば以下のルーティングの場合

routes.rb
Rails.application.routes.draw do
  get 'members' => 'members#index'
end

Members(リソース)をGET(取得)するとルート設計しています。

情報に対して汎用的な構文で一意に識別される

すべてのリソースはURIで識別されるということです。

情報に、別の情報や別の状態へのリンクを含めることができる

ハイパーテキスト(他の文書への参照を埋め込める)を拡張したハイパーメディア(文字情報に加え、画像や音声などの情報を扱えるようにし、対応づけたもの)を使おうということです。
ハイパーメディアを用いることで、現在のアプリケーションの状態や、違う情報へのリンクなどを表現します。

メリット

  • ステートレスなため、サーバ側の負荷が少ない
  • HTTP標準のメソッドを使用することで、一貫性のあるルートを設計できる
  • URIに規則が生まれるため、アプリ開発者はリソースを管理しやすい

おわりに

RailsのルーティングとRESTfulについてまとめました。
間違っているところなどがありましたら、教えていただけるとありがたいです。

27
20
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
27
20