0

因此,我正在更新具有以下设置的 Play 1.2.x 应用程序

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

api包中的控制器将数据呈现为移动客户端(Android、iPhone)使用的Json 。

现在我想要一个使用 api 的简单的 html web 应用程序。那么如何从 web 包中的控制器中使用 API 呢?

我的目标是避免在 web 控制器逻辑中重写 api 控制器逻辑。

谢谢!

4

2 回答 2

3

在我看来,在控制器之间重用方法并不是最佳实践。共享行为应该在模型中编码,然后两个控制器可以使用相同的模型方法。

尽管如此,如果你想这样做,你可以在你的 apis 控制器的公共方法中提取共享行为,你可以注释为“@Util”,然后从你的 web 控制器调用这个方法。

于 2012-07-19T15:46:43.567 回答
1

你的问题没有太多细节,所以我不知道它是否适用,但通常当我实现 REST API 时,我会让他们以不同的格式(JSON 和 HTML,如果你想要 JSONP 和 XML)提供答案。

主要思想是

  1. 检查请求以了解所需的格式:使用接受内容类型、url 扩展名,甚至是参数(以及更多关于它的信息)
  2. 选择正确的模板(如果您已经正确构建了 Json 对象,则跳过模板)

在游戏中,第一部分有不同的方法,例如。通过您的路线:在 Play 中请求 Content-Type!REST 网络服务框架Play 文档中有一个关于此的特定页面。

但是这个答案中最重要的部分是第二点:您应该使用相同的控制器,并且 HTML 模板应该能够使用以 json 格式(或者更多)发送回的相同数据来呈现您的页面!

注意。如果您需要更多地定制一些东西,您可以访问request控制器中的对象,检查请求的格式是什么,并采取相应的行动以使用适当的模板返回适当的数据!

于 2012-07-20T08:18:00.177 回答