我正在寻找一个替代可怕的.NET (WCF) REST功能。
为什么?
我对开源技术非常感兴趣,但在when服务方面,除了使用.NET when服务之外,我没有任何经验。
此外,我目前正在使用大量的Java和Python,并且正在远离Microsoft技术栈。
请在任何编程语言中提出备选方案,但请解释为什么它是好的或更好的,因为某些原因。(这个原因可能与语言的选择密切相关)
我想知道什么?
发布于 2011-02-06 19:06:59
Spring3.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“被转换为参数列表中的长变量,预订也是如此。Spring还可以使用同样的技术将JSON对象编组到自定义类中。注意,这个方法被注释为RequestMethod.GET,这意味着它是为GET请求调用的,而不是POST请求。
Spring3.0REST通过消除手动从/到RESTful对象手工创建/解组JSON的需要,使创建Java服务变得更加容易。
在SpringSource博客上有一个名为在Spring中休息的演示。学习曲线很低,但是由于依赖关系,让演示工作可能需要一些时间。一旦你有了安装和一个工作的演示,最困难的部分应该已经结束。
对于IDE集成,请查看春Roo。我没有使用它,但我听说它有一些特性与Eclipse集成,使您的生活更轻松。
Restlets
餐厅是专为休息而设计的。因此,开销比Spring3.0要低得多。Restlets更适合于没有GUI和不关心MVC的情况。Restlet可以很容易地同时充当服务器和客户端。它还有一个可以运行的嵌入式服务器,这样就不需要像Jetty或Tomcat这样的容器了。
我很少接触过Python,但是从我所看到的Google实现webApp框架的情况来看,路由器的概念感觉非常相似。那些有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框架的基于注释的模型,它还有助于拆分不同的HTTP方法,并将它们指向类中的不同方法。这是一个非常基本的"Hello“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";
}
} 有关Restlets框架的更多信息和示例,请查看Restlet网站。Restlets的学习曲线略低于Spring,因为它是以REST为目标的;因此,它并不包含Spring包含的所有额外功能,这些功能有时会导致很难找到问题的答案。如果你想要的是轻量级的东西,那么Restlets绝对是你要走的路。
这两个框架都将在Tomcat、Jetty以及Google中运行。
发布于 2011-02-10 01:04:16
如果您正在使用Java,并且熟悉Spring,那么您当然应该看看Spring 3.x。这个版本脱离了丑陋的XML配置,它的语法非常类似JAX的规范。也就是说,如果您了解Spring,那么学习Spring 3.0将是最少的。但是,如果您在理解IoC模式和其他方面有困难,那么这将是一次漫长的痛苦体验。:)
请记住,Spring 3.x 不是纯REST,基于Spring开发人员,它永远不会是将来的事。他们的观点是,已经有那么多好的REST实现,没有必要让Spring 3.x完全实现RESTful。
我肯定会向您推荐的另一个选项是泽西岛。泽西是纯粹的REST,换句话说,它是JAX的一个实现。泽西花了我30分钟学习。在我看来,注释比Spring 3.x更强大、更丰富。在我看来,Spring 3.x中的注释似乎很普通。泽西会自动为你生成WADL,尽管它非常基本.但是拥有一个总比没有一个好。如果您愿意,当然可以自定义您的WADL。(顺便说一下,WADL是REST版本的WSDL,如果您不知道这意味着什么)。泽西基本上检测到包含所有Resource类的包,并根据您所拥有的配置生成WADL,非常简洁。我要指出的最后一点是,泽西岛有一个很好的测试框架,您可以轻松地测试您的Restful web服务。换句话说,它们的测试框架允许您的单元测试轻松启动Grizzly或内存中的服务器来测试您的web服务。这当然是我迄今使用过的最好的一种。这里有一个非常简单的教程,让你把脚弄湿:http://www.vogella.de/articles/REST/article.html。这真的是的容易。:)
FYI,我使用了Spring 3.x和泽西。
发布于 2011-02-04 16:18:28
ServiceStack是最近的发展之一。我还没做多少,但到目前为止似乎还不错。
https://stackoverflow.com/questions/4900161
复制相似问题