Rails:HTTPとRESTfulなリソース設計について


HTTPとRESTfulなリソース設計についてまとめました。よろしくお願いいたします

前提...RailsにはHTTPリクエストからRubyの処理を呼び出し、クライアントに結果を返す仕組みが備わっている。

HTTPとは

Hyper Text Transfer Protocol の略で、分散コンピュータ間でHTMLなどの情報をやり取りするためのプロトコル
クライアントがサーバ上の「何かの情報」を「どうして欲しい」とリクエスト(HTTPリクエストという)し、サーバがレスポンスする

「何かの情報」→クエリとパス
「どうして欲しい」→HTTPメソッド

HTTPメソッドとは

クライアントが行いたい処理をサーバに伝える手段

よく使う4つのメソッド↓
GET..リソースを取得する
POST..サーバー上にリソースを作成する
PUT..リソースの状態を変更、または更新する
DELETE..リソースを除去、または削除する

CRUDとは

システムに必要な4つの主要機能である「生成(Create)」「読み取り(Read)」「更新(Update)」「削除(Delete)」のイニシャルを並べた用語のこと

RESTとは

インターネット(Web)上でいろいろな情報や機能を結びつける方法、あるいは考え方のひとつ。


インターネット上にある情報やデータ(リソース)は、すべて固有の名前(URN)か固有の住所(URL)を持っている。この URN と URL を合わせて URI という。
そして、URI を指定することでリソースにアクセスし、そのリソースに対してHTTPメソッド(「GET」や「POST」など)を送ることで操作するという考え方

REST では明示的に HTTP メソッドを使う必要があり、しかも HTTP プロトコルの定義どおりの方法で使う必要があるので基本的な設計原則によって、CRUD (create、read、update、delete) 操作とHTTPメソッドとが 1 対 1 に対応付けられる

HTTPメソッド 意味  CRUD
POST/PUT 作成  Create
GET 読み込み Read
PUT 更新  Update
DELETE 削除  Delete

RESTfulとは

RESTの原則に従って実装されているシステムのこと
Webに運用したソフトウェア設計様式を備えたルート(REST)のことで、URLで表現することができる。
つまりURLに対してHTTPのメソッドを利用することで統一感のある、意味がつかみやすいURLを設計することができる。

ex)リソース対象として仮のモデルクラス(Product)を作成し、次にルート定義、最後にルートの確認を行う

route.rb
resources :product
#productはリソース名
#リソース名はプログラムが使用するデータの一覧取得や編集などを行う対象となるものを設定する

ターミナルでモデルを作る 

$ rails g model product

を入力すると

                                     Prefix Verb   URI Pattern                                                                              Controller#Action
                puroducts GET    /puroducts(.:format)                                                                     puroducts#index
                          POST   /puroducts(.:format)                                                                     puroducts#create
             new_puroduct GET    /puroducts/new(.:format)                                                                 puroducts#new
            edit_puroduct GET    /puroducts/:id/edit(.:format)                                                            puroducts#edit
                 puroduct GET    /puroducts/:id(.:format)                                                                 puroducts#show
                          PATCH  /puroducts/:id(.:format)                                                                 puroducts#update
                          PUT    /puroducts/:id(.:format)                                                                 puroducts#update
                          DELETE /puroducts/:id(.:format)                                                                 puroducts#destroy

resourcesメソッドを利用することでHTTPメソッド(Verb列)とURLとアクションが紐づいたルート定義が生成されていることがわかる