RailsではRESTfulなアーキテクトを採用しているということですが
このよく聞くRESTful
という言葉をよくわかっていなかったので
railsチュートリアルの図を引用してメモをします。
HTTPリクエスト | URL | アクション | 用途 |
---|---|---|---|
GET | /users | index | すべてのユーザーを表示するページ |
GET | /users/1 | show | id=1のユーザーを表示するページ |
GET | /users/new | new | ユーザーを新規作成するページ |
POST | /users | create | ユーザーを作成するアクション |
GET | /users/1/edit | edit | id=1のユーザーを編集するページ |
PATCH | /users/1 | update | id=1のユーザーを更新するアクション |
DELETE | /users/1 | destroy | id=1のユーザーを削除するアクション |
上記の例であれば、/users/1
という同じURLが3つあります。
それぞれの役割に、show
、update
、destroy
と、異なるアクションを紐づけていますが
同一のURLとなっています。
現在使われているHTTPリクエストメソッドは、GET
とPOST
のため
普通は、showアクションは/users_show/1
、updateアクションは/users_update/1
、
destroyアクションは/users_destroy/1
とかのURLを考えますよね。
昔Django(pythonのwebフレームワーク)でアプリを作った時は実際にそうしてました。
でもそうするとurlを管理するファイルの中がアクションの数によっては大変なことになったのを
記憶しています。
それに、url文字列をmatchさせてアクション(Djangoであればviewですね)に紐づけるので
似たようなURLをたくさんつくると、場合によっては意図していなかったアクションにマッチ
してしまい、別な処理が走ったことなどがあり、結構焦ったことがあります。
RESTfulなアーキテクチャの場合、URLは同一のものを使うかわりに、HTTPリクエストメソッドに
それぞれ、GET
、PATCH
、DELETE
を使って異なるアクションに結びつけるようです。
こうすることでURLを名詞とし、HTTPリクエストメソッドを動詞とすることができ
シンプルにURLをいろいろなアクションに結びつけることができるようになります。
実際にrailsでメソッドとアクションを紐づけるファイルconfig/routes.rb
を見ると
ファイルの中が非常にシンプルで、Djangoで苦労した時のことを思い出したと同時にホッと
しました。
ところで、現在のブラウザにはPATCHやDELETEといったメソッドはないようです。
Railsは存在しないHTTPメソッドを存在するかのように見せかけ
RESTfulなアーキテクチャの実装を実現しているようです。