我正在寻找可怕的.NET(WCF)REST功能的替代品.
为什么?
我对开源技术很感兴趣,但是当涉及到webservices时,我没有任何经验,除了.NET webservices.
此外,我目前正在使用大量的Java和Python,而我正在远离Microsoft技术堆栈.
请用任何编程语言建议替代方案,但解释为什么它出于某些原因是好的或更好的.(这个原因可能与语言的选择密切相关)
我想知道什么?
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";
}
Run Code Online (Sandbox Code Playgroud)
在引擎盖下,URI字符串中的变量"hotel"将在参数列表中转换为long,就像预订一样.Spring REST还可以使用相同的技术将JSON对象编组到自定义类中.请注意,此方法注释为RequestMethod.GET,这意味着它是针对GET请求调用的,而不是针对POST请求调用的.
Spring 3.0 REST通过消除从/向Java对象手动重新发明轮子或编组/解组JSON文本的需要,可以更轻松地创建RESTful Web服务.
SpringSource博客上有一个名为REST In Spring MVC的演示.学习曲线很低,但由于依赖性,让演示工作可能需要一些时间.一旦你完成设置并有一个工作演示,最困难的部分应该结束.
有关IDE集成,请查看Spring Roo.我没有用它,但我听说它有一些与Eclipse IDE集成的功能,让你的生活更轻松.
Restlets:
Restlets专为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;
}
Run Code Online (Sandbox Code Playgroud)
它在客户端使用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";
}
}
Run Code Online (Sandbox Code Playgroud)
有关Restlet框架的更多信息和示例,请查看Restlet Web站点.Restlets的学习曲线略逊于Spring,因为它针对的是REST; 因此,它不包含Spring中包含的所有额外功能,有时可以很难找到问题的答案.如果你正在寻找轻量级的东西,Restlets肯定是要走的路.
这两个框架都将在Tomcat,Jetty以及Google App Engine上运行.
如果您使用的是Java并且熟悉Spring,那么您一定要看一下Spring MVC 3.x. 这个版本远离丑陋的XML配置,其语法与JAX-RS的规范非常相似.也就是说,如果你了解Spring,那么学习Spring MVC 3.0将是最小的.但是,如果您在理解IoC模式时遇到困难,那么这将是一个长期痛苦的经历.:)
请记住,Spring MVC 3.x 不是纯REST,它将永远不会在未来,基于Spring MVC开发人员.他们认为已经有很多优秀的REST实现,并且没有必要让Spring MVC 3.x完全RESTful.
我肯定会向你推荐的另一个选择是泽西岛.Jersey是纯REST,换句话说,它是JAX-RS的一个实现.泽西岛花了我30分钟学习.在我看来,注释比Spring MVC 3.x更强大,更丰富.Spring MVC 3.x的注释对我来说似乎很香.泽西岛会为你自动生成WADL,虽然它非常基本......但是有一个比没有它更好.如果你愿意,你当然可以自定义你的WADL.(顺便说一下,WADL是REST的WSDL版本,如果您不知道这意味着什么).Jersey基本上会检测包含所有Resource类的包, 并根据您拥有的配置生成WADL,非常简洁.我要指出的最后一件事是,Jersey有一个很好的测试框架,可以让您轻松测试Restful Web服务.换句话说,他们的测试框架允许您的单元测试轻松启动Grizzly或内存服务器来测试您的Web服务.这肯定是迄今为止我用过的最好的之一.这是一个非常简单的教程,让你的脚湿透了:http://www.vogella.de/articles/REST/article.html.这实在是THAT容易.:)
仅供参考,我使用过Spring MVC 3.x和Jersey.
Ruby和Rails (Ruby on Rails)对RESTful服务有很大的支持.事实上,Rails支持并鼓励以RESTful方式进行设计和开发.
感谢ruby强大的DSL功能,编写REST服务非常简单易行.由于你有python经验,学习ruby可能很容易.
请参阅本指南,了解如何定义rest url(称为rails中的路径).
其他Ruby Web框架(如Sinatra)也在这方面做得很好.
顺便说一句,最好的事情是ruby和rails都是开源的,ruby社区非常棒且非常活跃.
| 归档时间: |
|
| 查看次数: |
7725 次 |
| 最近记录: |