支持REST架构WEB服务:在工具包的应用

日期: 2008-03-20 作者:William Brodgen翻译:Eric 来源:TechTarget中国 英文

在上一篇文章中,我描述了规范的创建人如何处理业内对REST架构Web服务(RESTful Web services)引发的兴趣。我发现新方法和现有标准的修改中都包含REST。   而且,我发现同样的事情也发生在软件工具箱的开发商身上,这些软件工具箱广泛应用于分布式系统。换句话说,在现有的项目中添加REST界面,是为了满足开发商的利益,而且少数全新的工具中也添加了REST界面。

我非常惊奇地发现,众所周知的开源Java消息服务(JMS)的最新版本,也增加了一些REST的相关功能。   Java消息服务   JMS是面向消息中间件(MOM)的一个例子,是在松耦合分布式系统中执行数据交换的最简单的方式……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

在上一篇文章中,我描述了规范的创建人如何处理业内对REST架构Web服务(RESTful Web services)引发的兴趣。我发现新方法和现有标准的修改中都包含REST。

  而且,我发现同样的事情也发生在软件工具箱的开发商身上,这些软件工具箱广泛应用于分布式系统。换句话说,在现有的项目中添加REST界面,是为了满足开发商的利益,而且少数全新的工具中也添加了REST界面。我非常惊奇地发现,众所周知的开源Java消息服务(JMS)的最新版本,也增加了一些REST的相关功能。

  Java消息服务

  JMS是面向消息中间件(MOM)的一个例子,是在松耦合分布式系统中执行数据交换的最简单的方式之一。 JMS API因为其基本思想十分简单,自2001年发布以来几乎没有什么变化。JMS服务器将“生产者”发出的信息加以管理,并将其储存,以备“消费者”随后对其进行异步阅读。服务器可以持续提供这种服务,所以并没有要求生产者和消费者必须同时连接到网络。

  每条消息都是独立而完备的,都包括路由信息以及一个消息主体。相比于分布式系统的Javaspaces模式——消息内容决定消息命运,JMS服务器只注重路由信息,而忽略了消息主体。

  基本的通讯模式有两种,一种是发布-订阅,一种是点对点的消息队列。所有消息订阅用户都可以阅读发布的消息,甚至是某一特定的话题。比方说某公司中由多个客户抄的一个价格表。消息订阅用户不需要在信息发布时处于连接状态,只要他们已经注册了对该话题的持久连接。

  阅读发送到点对点消息队列的消息时需要占用该消息的使用权。可能会有多个用户连接到同一个队列,但是只有一个用户能得到所有消息,因此一个队列在计算网格中的分配工作只能是理想化的。因为消息队列和发布的话题都需要通过名字寻址,因此REST架构的资源寻址很容易适合JMS寻址方案。

  Apache ActiveMQ JMS服务器

  我免费下载并安装了一个最新的ActiveMQ构件,这是一个非常完整的下载包。为了用提供的例子对其检验,你只需要一个1.5版或更新版本的Java SDK,以及一个Ant构件工具包。Jetty servlet容器也包含在下载包中,因此你不必安装任何HTTP服务器。

  ActiveMQ工具包已经变得非常强大,相比简单的JMS支持,它提供了更多的功能。举例来说,它支持JavaScript脚本的专门服务,而且支持AJAX请求的处理。

  最让人感兴趣的是REST架构Web服务的例子。该程序包括:

  ·从一个发布-订阅的股票价格主题读取数据,创建一个股票投资展示。

  ·使用POST将信息发送至发布-订阅话题或是点对点队列。

  ·使用GET从队列中阅读信息。

  ActiveMQ通过GET从队列阅读信息的方式,说明了一个有趣的问题。在严格的REST架构中,一个GET不应当改变资源,但JMS要求读取点到点队列必须删除该消息。所以我猜想,将REST加装到其他框架中,也可能会碰到类似的问题。下面是开发商不得不说的一些话:

  注意,严格的REST架构要求GET是一个只读操作。因此,严格来说,我们不应该使用GET允许用户利用消息。尽管我们允许了GET的使用,这是因为它稍微简化了HTTP /DHTML /Ajax的一体化。

  作为典型的开源项目,与下载包一起提供的说明文件比较薄。不过,可以下载含有典型的Javadocs注释的源代码,而且该项目网站也提供有丰富的资源。

  Restlet——一种新方法

  关于REST架构WEB服务的全新方法,我们找到了一个例子,这就是Restlet项目。Restlet是Noelios Consulting公司的标志性产品,它是API的最初模板。这个开放源代码项目已经获得开放源代码促进会(Open Source Initiative)的“通用开发和发布许可”(Common Development and Distribution License)。其首次公开发行是在2005年11月,目前版本为1.0.7,对1.1版本有较大的修改。

  Restlet开发商认为只有完全取代了servlet API,才可以充分利用REST的价值。例如,servlet API每个请求只能使用一个线程的假设,避免了Java的“NIO”非阻断输入/输出类的使用,同时限制了其可扩展性。而NIO类的使用可以允许计算元件之间使用更为灵活的连接器。

  Restlet例子在惯于使用servlet API的开发商看来,可能乍看上去会觉得很不可思议。举例来说,他们认为没有什么可以与servlet Session相比。令人感到幸运的是,最近由Leonard Richardson和Sam Ruby合编的一本名叫“REST架构WEB服务”的书问世,其中包含了很多使用Restlet架构实现服务的例子。

  可下载的Restlet共享包包括实现Restlet API的Java类,以及一个被称为“Noelios Restlet引擎”的参考实现。这就建立了一个完整的Web服务器,提供了基本静态档案的高效服务。不过,如果你已经决心使用现有的servlet引擎,比如Tomcat,就必须提供一个运行Restlet程序的适配器。而且,还应当提供能连接ApacheWeb服务器或微软IIS的适配器。

  下一步是什么?

  我会寻找其他的例子,无论是旧框架中应用REST新特性的例子,还是全新方法的例子。也许我会找到足够的范例,可以写出第三部分文章。

翻译

Eric
Eric

相关推荐

  • SAP收购CallidusCloud 与Salesforce竞争

    一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]

  • 掌握基础的Java信息传送理念

    我们正步入应用程序组件化飞速发展的时代,在这个时代,即使是云也布满组件化。因此,开发人员应该思考如何设计出超越初期Java信息传送的JMS。

  • API开发与管理大作战

    2014将会是API管理方法新旧PK的一年,据Delyn Simons说,她领导了Mashery开发者的外展团队。应用编程接口(API)的主流化和私有化在新的一年也将掀起波澜,她在波士顿“Future Insights Ultimate Developer Event 2013”大会上预测说。

  • 公共API外包管理是否值得考虑?

    公共API外包管理是指聘请一个专家小组来解决可扩展性问题,同时也提出几套可替代的方案。