Guilherme Silveira 投稿给 InfoQ 告知了一个新的 ruby gem 包的发布,在开发超媒体感知的服务和客户端的时候使用它将非常容易。他这样说到:
关于什么是将 rest/restful 的思想运用到应用中以及它的好处是什么,已经被谈论得很多了。去年, Mark Baker 写过关于 restful 应用里的超媒体内容。还有更多关于正式定义 HATEOAS 的尝试以及它的优势的文章。尽管在创建基于 web 的服务方便有着一些很好的应用,但是它仍然缺失我们日常生活中最好的一部分超链接与超媒体内容。
他接着描述了定义一个订单的例子,这一订单将经过一系列定义好的转变,比如从未结算到结算等等。它允许将各种各样的转变映射到对应的动作…
class Order < ActiveRecord::Base state :unpaid, :allow => [:latest, :pay, :cancel] state :cancelled, :allow => :latest transition :latest, {:action => :show} transition :cancel, {:action => :destroy}, :cancelled transition :pay, {}, :preparing end
它将会生成诸如这样的一个基于 atom 的嵌入超媒体的资源表示:
<order> <product>basic rails course</product> <product>RESTful training</product> <atom:link xmlns:atom="http://www.w3.org/2005/Atom" href="http://www.caelum.com.br/orders/1" rel="latest" /> <atom:link xmlns:atom="http://www.w3.org/2005/Atom" href="http://www.caelum.com.br/orders/1/pay" rel="pay" /> <atom:link xmlns:atom="http://www.w3.org/2005/Atom" href="http://www.caelum.com.br/orders/1" rel="cancel" /> </order>
并且支持客户端调用通过消费这一资源表示而动态创建的方法:
order = Order.from_web 'http://caelum.com.br/orders/1' order.pay(payment)
Jim Webber ,他的 RESTBucks 文章和马上发布的 REST 著作启发了这一 gem 的创建,对此表示到
智多星 Guilherme Silveira 和 Adriano Almeida,Lucas Cavalcanti 一道,在 RESTful 服务的前沿掀起了风暴。[…] 更为重要的是,他们编写了一个通用的能够用于探寻这一协议的客户端。他们的样例服务托管于 GAE,并且在 GitHub 上发布了代码让大家参与。你们干得太棒了,并且非常及时。
Savas Parastatidis ,这本书的合著者,对此有如下的评论
I can’t wait for our book to finish so that everyone can check out our discussion of hypermedia and the stuff we’ve built. It’s really great to see Restfulie taking a very similar approach to ours.
关于这一 gem 用于创建 RESTful 服务和消费这些服务的客户端的具体例子可以在 GitHub 项目存储获得。
查看英文原文: RESTfulie - A Gem To Create Hypermedia Aware Services And Clients
评论