2009-06-05 7 views
7

いくつかのリソースを公開しているgrails Webアプリケーションがあるとします。RESTful grailsアプリケーション:UrlMappingをDRYする

  • タグ
  • のURL
  • ユーザー

アプリケーションのユーザが対話古典ウェブインタフェースと、いくつかの管理を持っています。 RESTful APIを使用して、アプリケーションからクライアントにリソースを公開したいと考えています。私たちは、アプリケーションのその部分が既に持っているコントローラとコードを混乱させたくないと思います。 したがって、次の情報を得ました:

ウェブインターフェイスがhost/app_path/url/[list|show|create]の場合、私たちはREST APIを/host/app_path/rest/urlにします。

だから我々は、次のUrlMappingsファイルになってしまった:

問題は、これがここに正確に最もDRYものではないこと、です。タグなどのリソースを追加すると悪化します。彼らは我々がループしてマッピングクロージャを生成しようとした...まだ非常に類似したコードの他の三つのブロック...

非CRUD機能は、特定の規準とそのように検索のようなものになりますし

を翻訳します成功はしない。私たちは完全に間違ったところにいるのですか?

答えて

7

私は、次のマッピングをお勧めします:

以下
"/rest/url/$id?"(resource:"urlRest") 

これはurlRestControllerのために作成することを行動へのマッピングHTTPメソッドされています。あなたがマップする理由私が見

GET   show 
PUT   update 
POST  save 
DELETE  delete 

/rest/url保存するPOSTと/ rest/url/id PUTを更新するが、それはそれらの動詞の意味に反する。 PUTは新しいURLを追加する唯一の方法であり、POSTはURLを更新する唯一の方法です。あなたがレイアウトしたやり方ではうまくいくでしょうし、あなたの現在のコントローラコードを手の届かないものにするという制約があるなら、最良の方法かもしれません。しかし、私の推測では、コントローラはすでにデフォルトのマッピングを処理するように既にコード化されている可能性があります(IDがない場合は更新/削除エラー、IDがない場合はリスト表示のリダイレクト)。

+1

ああ、PUT/POSTのもの:D – kungfoo

関連する問題