Spring 3.0 REST:
Spring 使用基于注解的控制器,可用于将 url 绑定到控制器中的方法。注解用于区分 GET 方法和 POST 方法。
@RequestMapping(value="/hotels/{hotel}/bookings/{booking}",
method=RequestMethod.GET)
public String getBooking(@PathVariable("hotel") long hotelId,
@PathVariable("booking") long bookingId, Model model) {
Hotel hotel = hotelService.getHotel(hotelId);
Booking booking = hotel.getBooking(bookingId);
model.addAttribute("booking", booking);
return "booking";
}
在后台,URI 字符串中的变量“hotel”在参数列表中被转换为 long,预订也是如此。 Spring REST 还可以使用相同的技术将 JSON 对象编组到自定义类中。请注意,此方法被注释为RequestMethod.GET,这意味着它是针对 GET 请求而不是 POST 请求调用的。
Spring 3.0 REST 使创建 RESTful Web 服务变得更加容易,因为无需重新发明轮子或手动将 JSON 文本编组/解组到 Java 对象。
在 SpringSource 博客上有一个名为 REST In Spring MVC 的演示。学习曲线很低,但由于依赖关系,让演示工作可能需要一些时间。完成设置并进行演示后,最困难的部分应该已经结束了。
有关 IDE 集成,请查看 Spring Roo。我没有使用过它,但我听说它有一些与 Eclipse IDE 集成的功能,让您的生活更轻松。
Restlets:
Restlet 专为 REST 设计。因此,开销比 Spring 3.0 低很多。 Restlet 更适合您没有 GUI 以及您不关心 MVC 的情况。 Restlet 可以轻松地充当服务器和客户端。它还有一个可以运行的嵌入式服务器,无需像 Jetty 或 Tomcat 这样的容器。
我很少接触 Python,但从我看到的 Google App Engine 的 webApp 框架实现来看,Router 的概念感觉非常相似。有 Python 背景的人可能会发现学习曲线要低很多:
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
getConnectorService().getClientProtocols().add(Protocol.FILE);
// Serve the files generated by the GWT compilation step.
Directory dir = new Directory(getContext(), LocalReference.createFileReference(new File("war/")));
router.attachDefault(dir);
router.attach("/contacts/123", ContactServerResource.class);
return router;
}
它在客户端使用 GWT;我更喜欢去掉那部分,因为它让我想起了 Java Swing。虽然有些人可能会觉得这很有利,但我个人的偏好是坚持使用感觉更像 Web 的技术。
以下是使用独立模式的 REST 服务器的简单示例。服务器在端口 8182 上运行,它侦听 GET 请求。它具有与 Spring REST 框架类似的基于注释的模型,这也有助于拆分不同的 HTTP 方法并将它们指向类中的不同方法。这是一个非常基本的“Hello World”REST 示例:
public class FirstServerResource extends ServerResource {
public static void main(String[] args) throws Exception {
// Create the HTTP server and listen on port 8182
new Server(Protocol.HTTP, 8182, FirstServerResource.class).start();
}
@Get
public String toString() {
return "hello, world";
}
}
查看Restlet Web Site 了解更多信息和 Restlets 框架示例。 Restlets 的学习曲线比 Spring 略少,因为它是针对 REST 的;因此,它不包含 Spring 附带的所有额外功能,这些功能有时会使寻找问题的答案变得困难。如果您正在寻找轻量级的东西,Restlet 绝对是您的不二之选。
这两个框架都将在 Tomcat、Jetty 以及 Google App Engine 上运行。