2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:182135
用户头像

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

关注

评论

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

编程语言中 null 引用的十亿美元错误趣谈

汪子熙

Java JavaScript SAP abap 10月月更

打包 Composition API、Vue3

小鑫同学

前端 Node 10月月更

搭建组件库最小原型(支线)

小鑫同学

前端 Node 10月月更

熬夜整理最近前端面试知识点

loveX001

JavaScript

西安交大谢涛:云上做实验,让计算机教学实现质的飞跃

Lily

Docker load 大镜像(17G) 报错no space left on device

琦彦

Docker 10月月更 Base Device Size

Qt | 线程 QThread

YOLO.

c++ qt 10月月更

Java数组详解

共饮一杯无

Java 数组 10月月更

【Java深入学习】线程状态

Geek_65222d

10月月更

构建工具Gulp-lesson5

小鑫同学

前端 Node 10月月更

Vue2.x组件间通信汇总表

小鑫同学

前端 Node 10月月更

Java基础(四)| 数组及内存分配详解

timerring

Java 数组 内存分配 10月月更

QtCreator配置protobuf环境

中国好公民st

qt Qt Creator 10月月更

谈谈前端性能优化-面试版

loveX001

JavaScript

从URL输入到页面展现到底发生什么?

loveX001

JavaScript

构建工具Gulp-lesson4

小鑫同学

前端 Node 10月月更

Docker下Nacos持久化配置

程序员欣宸

Docker Spring Cloud nacos 10月月更

HashSet源码全方位解读

知识浅谈

10月月更

20221013

留白的艺术

技术分享 | 接口自动化如何处理 Form 请求?

霍格沃兹测试开发学社

Spring JPA 查询的时候提示错 org.hibernate.TransientObjectException

HoneyMoose

Java中的重载和重写的区别

共饮一杯无

Java 10月月更 重载重写

【Ajv】JSON Schema Validator

小鑫同学

前端 Node 10月月更

如何搭建组件库的最小原型

小鑫同学

前端 Node 10月月更

标签与指标到底有什么区别?

雨果

标签 指标

Qt | 实现动态创建多个Tab页,页中动态创建多个子部件

YOLO.

qt 10月月更 C++

正确发送统计数据到服务器

小鑫同学

前端 Node 10月月更

专访北大荆琦:产业前沿进课堂,通过产学合作培养开源贡献者

Lily

SAP UI5 OData谣言粉碎机:极短时间内发送两个 Odata request,前一个会自动被 cancel 掉吗

汪子熙

JavaScript 前端开发 SAP UI5 ui5 10月月更

【愚公系列】2022年10月 Go教学课程 027-深拷贝和浅拷贝

愚公搬代码

10月月更

通过linux-PAM实现禁止root用户登陆的方法

京东科技开发者

数据库 Linux 公有云 云主机 linux-PAM

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