java - RESTful 畅玩!框架

标签 java rest jersey restlet playframework

我们正在计划一个主要为移动应用提供内容的项目,但需要有一个网站。

我的问题是使用 Jersey 或 ReSTLet 为我们的移动应用程序开发 REST API,然后使用 Play!为网站服务。

还是只使用 Play 更有意义!做这一切?如果是这样,如何使用 Play 进行 REST!框架?

最佳答案

根据要求,一种简单的类似 REST 的方法。它的工作方式与 Codemwncis 的解决方案几乎相同,但使用 Accept header 进行内容协商。首先是路由文件:

GET     /user/{id}            Application.user
POST    /user/                Application.createUser
PUT     /user/{id}            Application.updateUser
DELETE  /user/{id}            Application.deleteUser

您没有在此处指定任何内容类型。恕我直言,只有当您想要为某些资源拥有“特殊”URI 时才需要这样做。就像声明到 /users/feed/ 的路由总是在 Atom/RSS 中返回一样。

应用程序 Controller 如下所示:

public static void createUser(User newUser) {
    newUser.save();
    user(newUser.id);
}

public static void updateUser(Long id, User user) {
    User dbUser = User.findById(id);
    dbUser.updateDetails(user); // some model logic you would write to do a safe merge
    dbUser.save();
    user(id);
}

public static void deleteUser(Long id) {
    User.findById(id).delete();
    renderText("success");
}

public static void user(Long id)  {
    User user = User.findById(id)
    render(user);
}

如您所见,我只删除了 getUserJSON 方法并重命名了 getUser 方法。要使不同的内容类型起作用,您现在必须创建多个模板。每个所需的内容类型一个。例如:

user.xml:

<users>
  <user>
    <name>${user.name}</name>
    . . .
  </user>
</users>

user.json:

{
  "name": "${user.name}",
  "id": "${user.id}",
  . . . 
}

user.html:

<html>...</html>

这种方法始终为浏览器提供 HTML View ,因为所有浏览器都在其 Accept header 中发送 text/html 内容类型。所有其他客户端(可能是一些基于 JavaScript 的 AJAX 请求)可以定义自己想要的内容类型。使用 jQuerys ajax() 方法,您可以执行以下操作:

$.ajax({
  url: @{Application.user(1)},
  dataType: json,
  success: function(data) {
    . . . 
  }
});

这应该可以让您以 JSON 格式获取 ID 为 1 的用户的详细信息。 Play 目前原生支持 HTML、JSON 和 XML,但您可以通过遵循 official documentation 轻松使用不同的类型。或使用 content negotiation module .

如果您使用 Eclipse 进行开发,我建议使用 REST client plugin它可以让您测试您的路线及其相应的内容类型。

关于java - RESTful 畅玩!框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4379485/

相关文章:

java - 如何让我的聊天程序随着聊天的进行而向下滚动?

java - 使用 junit 测试输入

java - 在 jersey 中使用 streamoutput 响应时,我已经刷新了一些输出后如何处理异常?

java - 使用 REST API 创建新站点

forms - Spring MVC Restful 应用程序 : Redirect a form result to another page

jersey - Vert.x ReadStream<Buffer> 到 InputStream

java - JSONObject 作为 POJO 中的成员变量无法识别 -Jersey

java - hadoop 中明显的内存泄漏

java - 发现 nn/hadoop-kerberos@HADOOP-KERBEROS 不支持的 key 类型 (8)

python - 如何合并两个包含具有相同签名的方法的Python类?