为什么?
我对开放源码技术很感兴趣,但是对于webservices来说,除了.NET webservices之外,我没有任何经验.
此外,我目前正在使用大量的Java和Python,而我正在从Microsoft技术栈移开.
请用任何编程语言来建议替代方案,但是要解释为什么它是好还是更好的原因. (这个原因可能与语言的选择密切相关)
我想知道什么?
>使用方便
>安装
>配置
>生成能力
> IDE集成
>部署
>学习曲线
利弊
>等
解决方法
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 REST还可以使用相同的技术将JSON对象编入自定义类.请注意,此方法注释为RequestMethod.GET,这意味着它被调用为GET请求而不是POST请求.
Spring 3.0 REST使得创建RESTful Web服务变得更加容易,无需重新开发轮子,也可以通过手工从/对Java对象进行组装/解组JSON文本.
在SpringSource博客上有一个演示文稿,即REST In Spring MVC.学习曲线很低,但是由于依赖关系,让演示工作可能需要一些时间.一旦你得到安装并且有一个工作的演示,最难的部分应该结束.
对于IDE集成,请查看Spring Roo.我没有使用它,但我听说它有一些与Eclipse IDE集成的功能,使您的生活更轻松.
Restlets:
Restlets仅用于REST.因此,开销比Spring 3.0低很多. Restlets更适合您没有GUI的情况,以及您不关心MVC的情况. Restlet可以轻松地用作服务器和客户端.它还具有可以运行的嵌入式服务器,无需像Jetty或Tomcat这样的容器.
我很少接触到Python,但是从我看到Google App Engine实现的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 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框架的更多信息和示例. Restlet的学习曲线略逊于Spring,因为它的目标是REST;因此,它不包含Spring中包含的所有额外功能,有时可以使问题难以找到答案.如果你正在寻找轻量级的东西,Restlet绝对是要走的路.
这两个框架都将在Tomcat,Jetty以及Google App Engine中运行.