2009-06-05 113 views
7

假設我們有一個grails web應用程序暴露幾個資源。RESTful grails應用程序:幹起來UrlMapping

  • 標籤
  • 網址
  • 用戶

應用程序有一個傳統Web界面將用戶和一些管理互動。 我們希望通過RESTful API將應用程序中的資源公開給客戶端,並且我們不希望應用程序的這部分混亂我們已有的控制器和代碼。 所以我們想出了以下幾點:

如果網絡界面提供host/app_path/url/[list|show|create]我們希望REST API在/host/app_path/rest/url

所以我們結束了以下UrlMappings文件:

的問題是,這是不完全的最乾的事兒在這裏。隨着我們添加更多資源(如標籤),情況會變得更糟。他們將轉化還非常類似的代碼,另外三個塊...

非CRUD功能會之類的具體準則和搜索等...

我們試圖產生一個循環的映射關閉,但沒有成功。我們在這裏完全走錯了路嗎?

回答

7

我推薦以下映射:

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

下面是HTTP方法動作映射,這將創造的urlRestController:

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 2009-07-15 07:07:27