Rails で RESTful な URL にこだわらないと...

備忘録。

ダメなルーティングの臭い

  • 名詞ではなく動詞が使われている
  • resources/resourceよりもget/post/put/patch/deleteが使われている
  • コントローラ内にscaffoldで生成される7つのアクション以外のアクション定義が多い
  • resources/resourceのonlyオプションで本来使われるべき7つのアクションがcollection/memberブロック中に登場する

ダメなルーティングだと起こりえる問題

  • リソースの発見を逃す
  • モデルとテーブルの発見を逃す
  • 機能追加の際に、テーブルにNULL可なカラムを追加し、レコードをUPDATEする処理を書くようになる
  • 1つのテーブルに複数の要件が盛り込まれ、モデルのコールバックなどで「関心事の分離」ができない状態になる
  • しばしば正規化が崩れ、状態管理が複雑になる/過去の状態が追跡不可能になる
  • コントローラにアクションが増えるにしたがって、モデルにあるべきロジックがコントローラに残る(Fat Controller)

避けるためのヒント

  • resource/resources の単数/複数の違いを知る(inflector なども調べとくとよい)
  • shallow/module/namespace/path オプションとコントローラの書き方を学ぶ
  • scaffold で生成される以外のアクションを極力書かない
  • 永続化しないモデルを導入してエントリポイントとする(サービスパターン、ファサードパターン)
  • DB のイベント系エンティティと REST のリソースを対応させて考えてみる
  • UPDATE SQLがリソースの更新以外で発行されたら検討の余地あり