2012-07-19 67 views
0

所以我更新播放1.2.x的應用程序與具有下列設置消費我自己的REST API的Play框架

- controllers 
    - api 
     - Documents // create, update, read, delete, list 
     ... // more controllers 
    - web 
     - Documents // list, read, etc... 
     .. // more controllers 

API包中的控制器使得數據Json的所使用由移動客戶端(Android,iPhone)。

現在我想要一個簡單的html web應用程序消費api。那麼,如何從Web包中的控制器使用API​​?

我的目標是避免重寫web控制器邏輯中的api控制器邏輯。

謝謝!

回答

3

控制器之間的重用方法在我看來並不是最佳實踐。共享行爲應該在模型中編碼,然後兩個控制器可以使用相同的模型方法。

如果你想這樣做,你可以在你的apis控制器中的公共方法中提取共享行爲,你可以註釋爲「@Util」,然後從你的web控制器調用這個方法。

+0

這很有道理。我想我會爲Web應用程序重寫單獨的控制器。無論如何,大部分邏輯都是在模型中抽象出來的。謝謝! – Regis 2012-07-20 09:28:33

+0

@Regis PS。只是看到了這個......我仍然認爲擁有一個控制器和兩個不同的模板會更好/更容易......我相信你可以做到這一點! – Stefano 2012-07-20 10:21:42

1

在你的問題中沒有太多細節,所以我不知道它是否適用,但通常當我實現REST API時,我讓他們以不同的格式提供他們的答案(JSON和HTML,如果你想要JSONP和XML例如)。

主要的想法是隻是

  1. 檢查就知道需要什麼格式的要求:要麼使用accept content type, the url extension, or even a parameter(和some more about it
  2. 挑選合適的模板(或跳過一個模板,如果你已經正確地建立了你的Json對象)

在演奏中有不同的方法來做第一部分,通過您的路線:Request Content-Type in Play! Framework for REST webservices;有關於此的特定頁面Play documentation

但是這個答案中最重要的部分是第二點:你應該使用相同的控制器,並且HTML模板應該能夠使用與json相同的數據來呈現頁面(或者可能有點更多)!

注意:如果您需要再定製一些東西,則可以訪問控制器中的request對象,檢查請求的格式是什麼,並相應地採取適當的模板來返回適當的數據!

+0

感謝您的鏈接。我會檢查出來。 – Regis 2012-07-20 09:30:40