Guilherme Silveira投稿给InfoQ告知了一个新的ruby gem包的发布,在开发超媒体感知的服务和客户端的时候使用它将非常容易。他这样说到:
\\关于什么是将rest/restful的思想运用到应用中以及它的好处是什么,已经被谈论得很多了。去年, Mark Baker 写过关于restful应用里的超媒体内容。还有更多关于 正式定义HATEOAS的尝试以及它的 优势的文章。尽管在创建基于web的服务方便有着一些很好的应用,但是它仍然缺失我们日常生活中最好的一部分 超链接与超媒体内容。\\
他接着描述了定义一个订单的例子,这一订单将经过一系列定义好的转变,比如从未结算到结算等等。它允许将各种各样的转变映射到对应的动作...
\\class Order \u0026lt; ActiveRecord::Base \ state :unpaid, :allow =\u0026gt; [:latest, :pay, :cancel]\ state :cancelled, :allow =\u0026gt; :latest\\ transition :latest, {:action =\u0026gt; :show}\ transition :cancel, {:action =\u0026gt; :destroy}, :cancelled\ transition :pay, {}, :preparing \end\
它将会生成诸如这样的一个基于atom的嵌入超媒体的资源表示:
\\\u0026lt;order\u0026gt; \ \u0026lt;product\u0026gt;basic rails course\u0026lt;/product\u0026gt; \ \u0026lt;product\u0026gt;RESTful training\u0026lt;/product\u0026gt; \ \u0026lt;atom:link xmlns:atom=\"http://www.w3.org/2005/Atom\" \ href=\"http://www.caelum.com.br/orders/1\" rel=\"latest\" /\u0026gt; \ \u0026lt;atom:link xmlns:atom=\"http://www.w3.org/2005/Atom\" \ href=\"http://www.caelum.com.br/orders/1/pay\" rel=\"pay\" /\u0026gt; \ \u0026lt;atom:link xmlns:atom=\"http://www.w3.org/2005/Atom\" \ href=\"http://www.caelum.com.br/orders/1\" rel=\"cancel\" /\u0026gt; \\\u0026lt;/order\u0026gt; \\
并且支持客户端调用通过消费这一资源表示而动态创建的方法:
\\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