写点什么

RESTfulie:一个创建超媒体感知服务与客户端的 Gem

  • 2009-11-30
  • 本文字数:1112 字

    阅读完需:约 4 分钟

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

2009-11-30 06:181722
用户头像

发布了 133 篇内容, 共 37.8 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

RWA 成下一轮加密大叙事,PoseiSwap 的价值正在凸显

西柚子

TTS语音合成技术及其应用

来自四九城儿

Nautilus Chain:模块化Layer3的先行者

鳄鱼视界

2023-06-22:一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试 给你一个二维数组 classes ,其中 classes[i] = [passi, totali] 表

福大大架构师每日一题

算法 福大大架构师每日一题

基于CC2530设计智慧农业控制系统

DS小龙哥

6 月 优质更文活动

RWA 成下一轮加密大叙事,PoseiSwap 的价值正在凸显

威廉META

跨AZ部署最佳实践之Kafka

焦振清

【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(基本概念篇)

洛神灬殇

领域驱动设计 DDD 领域驱动模型DDD 中台架构 领域驱动模型

RWA 成下一轮加密大叙事,PoseiSwap 的价值正在凸显

大瞿科技

无处不在 | 亚马逊云科技的 Java 生态

亚马逊云科技 (Amazon Web Services)

Java 开源 jdk

问答对话文本数据,构建智能问答对话系统的基础

来自四九城儿

驾驶新时代:车载语音识别的革命性进展与应用

来自四九城儿

分布式流处理组件-生产实战:Broker节点负载

谢先生F

kafka 负载均衡 broker

符号接在 busybox 中的妙用

ScratchLab

老大给了个新需求:如何将汉字转换成拼音字母?1行Python代码搞定!

程序员晚枫

Python 拼音 汉字

头一次见单例模式讲的如此透彻

越长大越悲伤

设计模式 单例模式

TiDB 7.1资源管控和Oceanbase 4.0多租户使用对比

TiDB 社区干货传送门

新版本/特性解读 7.x 实践

强化学习从基础到进阶-案例与实践[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战

汀丶人工智能

人工智能 深度学习 强化学习 Qlearning 6 月 优质更文活动

2023-06-23:redis中什么是缓存击穿?该如何解决?

福大大架构师每日一题

福大大架构师每日一题

Nautilus Chain:模块化Layer3的先行者

威廉META

cdc任务同步错误但不会触发告警问题记录

TiDB 社区干货传送门

故障排查/诊断

TiDB v7.1.0离线升级命令版

TiDB 社区干货传送门

实践案例 版本升级 7.x 实践

时间戳与时区

ScratchLab

skywalking沉了一年的线程池插件bug被我解决了

夏奇

Java Agent Skywalking ClassLoader 字节码增强 开源贡献

RWA 成下一轮加密大叙事,PoseiSwap 的价值正在凸显

股市老人

RWA 成下一轮加密大叙事,PoseiSwap 的价值正在凸显

BlockChain先知

RWA 成下一轮加密大叙事,PoseiSwap 的价值正在凸显

鳄鱼视界

横看Dubbo-微服务治理之无损上线

K

微服务 dubbo 无损

在高度为h的堆中,元素个数最多和最少分别是多少?

福大大架构师每日一题

ChatGPT

强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战

汀丶人工智能

人工智能 深度学习 强化学习 Qlearning 6 月 优质更文活动

RESTfulie:一个创建超媒体感知服务与客户端的Gem_SOA_Dilip Krishnan_InfoQ精选文章