2012-07-19 66 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