【问题标题】:Consume my own REST api with Play Framework使用 Play Framework 使用我自己的 REST api
【发布时间】:2012-07-18 19:26:09
【问题描述】:

所以我正在更新一个具有以下设置的 Play 1.2.x 应用程序

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

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

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

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

谢谢!

【问题讨论】:

    标签: api rest playframework playframework-1.x


    【解决方案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 webservicesPlay documentation 上有专门的页面介绍这个。

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

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

    【讨论】:

    • 感谢您的链接。我会检查出来的。
    【解决方案2】:

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

    无论如何,如果您想这样做,您可以在您的 api 控制器的公共方法中提取共享行为,您可以将其注释为“@Util”,然后从您的 Web 控制器调用此方法。

    【讨论】:

    • 这是有道理的。我想我将为网络应用程序重写单独的控制器。无论如何,大部分逻辑都是在模型中抽象出来的。谢谢!
    • @Regis PS。刚看到这个..我仍然认为拥有一个控制器和两个不同的模板会更好/更容易...我相信你可以做到!
    猜你喜欢
    • 1970-01-01
    • 2016-01-17
    • 2014-12-30
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多