首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有什么好的开源REST out服务技术?

有什么好的开源REST out服务技术?
EN

Stack Overflow用户
提问于 2011-02-04 16:10:23
回答 7查看 7.8K关注 0票数 14

我正在寻找一个替代可怕的.NET (WCF) REST功能。

为什么?

我对开源技术非常感兴趣,但在when服务方面,除了使用.NET when服务之外,我没有任何经验。

此外,我目前正在使用大量的Java和Python,并且正在远离Microsoft技术栈。

请在任何编程语言中提出备选方案,但请解释为什么它是好的或更好的,因为某些原因。(这个原因可能与语言的选择密切相关)

我想知道什么?

  • 易用性
    • 安装
    • 配置
    • 发电能力
    • IDE集成
    • 部署

  • 学习曲线
  • 赞成与反对
  • 等。
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-02-06 19:06:59

Spring3.0 REST

Spring使用基于注释的控制器,这些控制器可用于将url绑定到控制器中的方法。注释用于区分GET方法和POST方法。

代码语言:javascript
复制
@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背景的人可能会发现学习曲线要低得多:

代码语言:javascript
复制
@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示例:

代码语言:javascript
复制
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中运行。

票数 7
EN

Stack Overflow用户

发布于 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和泽西。

票数 6
EN

Stack Overflow用户

发布于 2011-02-04 16:18:28

ServiceStack是最近的发展之一。我还没做多少,但到目前为止似乎还不错。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4900161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档