是玩!Framework 2.0适合创建REST API吗?

cur*_*zen 10 java rest playframework playframework-2.0

我使用Play开发了一个REST API!框架1.2.4,我对框架非常不满意.简单性和快速的开发周期帮助我实现了这一目标,只需花费我传统Java EE路线的一小部分时间.

现在我正在使用Play进行探索!2.0.3用于我的下一个项目.我看到虽然框架已得到增强,并且使开发Web应用程序变得更加容易,但关于REST API的情况也是如此.我的应用程序将不会有任何HTML - 我将仅使用XML或JSON或我将来决定使用的任何数据交换格式进行响应.

所以,问题是:

有没有人在这里使用Play 2.0.x来暴露非HTML纯REST API?

更多细节:

以下是我认为与1.2.x相比,在Play 2.0.x中开发纯REST API更困难的一些因素.如果我错了,请纠正我的理解.

内容谈判更难

在玩!1.2.4,我内容协商是建立在框架之上的.有一些选项可以在routes文件中定义请求所期望的内容类型.

GET /friends User.listFriends(format:'xml')

然后,在控制器中,

public static void getFriends(){
    render();
}
Run Code Online (Sandbox Code Playgroud)

这将导致views/xml/User/listFriends.xml模板自动呈现.要明天添加对JSON的支持,我需要做的就是添加一个views/json/User/listFriends.json模板.

我不知道如何在游戏中做到这一点!2.0.x版本

创建非html模板不太直观

经过一些反复试验,我发现可以在play文件夹中创建一个listFriends.scala.xml!2.0.然后,需要在控制器代码中调用它,如下所示:

return ok(views.xml.listFriends.render());

但是,Eclipse并不喜欢这样,因为Eclipse不知道views.xml.listFriends它只是在播放编译完成后生成的.这里有什么我想念的吗?

Per*_*ega 5

在Play(Scala)中,您可以执行以下操作:

val myXMl = obtainXML();
return Ok(myXML).as("text/xml")
Run Code Online (Sandbox Code Playgroud)

我不确定Java中的语法,但它是等价的:不是创建模板,而是生成XML然后将其发送给用户,将返回类型设置为"text/xml"(或json或无论你需要它是什么).


nde*_*rge 5

正如Pere Villega解释的那样,但是使用Java语法:

String xml = getXMLAsString();
return ok(xml).as("text/xml");
Run Code Online (Sandbox Code Playgroud)

如()方法是一部分状态类.

或者,另一种选择是:

String xml = getXMLAsString();
response().setContentType("text/xml")
return ok(xml);
Run Code Online (Sandbox Code Playgroud)