写点什么

Spring 对基于 REST 的 Web Services 增加 HATEOAS 支持

  • 2013-06-09
  • 本文字数:873 字

    阅读完需:约 3 分钟

Spring Framework 目前正在为超文本驱动的 REST web services 添加 HATEOAS (超媒体即应用状态引擎)支持。HATEOAS 主要专注于以类库的方式,为简化超媒体链接的创建,以及在和Spring(特别是Spring MVC)一起使用时对REST 资源表述进行装配提供API。

XML 和 JSON

该类库提供了一系列类型去简化 XML 和 JSON 的操作。

链接

Spring HATEOAS 类库提供了若干个类参与链接 (links) 和关联 (relations) 相关工作。

类用于创建和保持链接,它采用 Atom 的链接定义方式,通过 _rel_ 和 _href_ 属性去描述一个链接。当使用 XML 时, 链接将在 Atom 命名空间中呈现。

在创建 URI 字符串时,一个常见的​​问题是在代码中到处充斥着重复的字符串常量。_ControllerLinkBuilder_ 类解决了这个问题,它从当前请求的 URI 中提取基础 URI,然后将 Controller 类中的根路径映射添加到对应的资源中,从而组合成一个完整的 URI。

当资源以实体类的方式直接表述时,Spring HATEOAS 提供了类来为这些实体类型创建链接,使其指向一个集合类资源或单一的资源。

当使用超媒体时,查找某个特定关联的对应链接是很常见的。Spring HATEOAS 对此提供了 _LinkDiscoverer_ 类进行支持。

资源

Spring HATEOAS 包含了一个基类 ResourceSupport,当需要创建资源类时可以继承这个类。举个例子,它对链接提供了支持。

另一个基类 ResourceAssemblerSupport 有助于减少在实体和资源之间进行映射和为资源增加链接时所需的代码量。该类还能够建立单一的资源或资源集合。

Geraint Jones 基于一个简单的场景编写了一个使用 Spring HATEOAS 的例子

在JAX 2013 大会上, Martin Lippert 的“使用Spring 和JavaScript 的当代架构”的演讲中也包含了对Spring HATEOAS 的介绍。

Spring HATEOAS 类库目前处于 0.5 版本的阶段,并且正在为 0.6 版本继续努力着。

查看英文原文: Spring adds HATEOAS Support to REST Based Web Services


感谢赵震一对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013-06-09 07:495507
用户头像

发布了 81 篇内容, 共 27.2 次阅读, 收获喜欢 5 次。

关注

评论

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

100台机器上海量IP如何查找出现频率 Top 100?

秦怀杂货店

IP 海量数据 top

新一代容器平台ACK Anywhere,来了

阿里巴巴云原生

阿里云 云原生 ACK Anywhere

重置不良的编程陋习

devpoint

编码习惯 10月月更

以太坊的黄金时代:模块化的区块链范式的开端

CECBC

在线2-36任意进制转换工具

入门小站

工具

[ Golang 中的 DDD 实践] 值对象

baiyutang

golang 设计模式 领域驱动设计 DDD 10月月更

MyBatis 批量插入数据的 3 种方法!

王磊

Java mybatis springboot

字节跳动是如何落地微前端的

字节跳动终端技术

字节跳动 大前端 Web应用开发

【优化技术专题】「线程间的高性能消息框架」再次细节领略Disruptor的底层原理和优势分析

码界西柚

Disruptor 异步高性能 高并发处理 性能提升 10月月更

Pandas教程:数据处理基石-数据探索

Peter

Python pandas

Pandas教程:数据类型操作

Peter

Python pandas

看山聊 Java:检查日期字符串是否合法

看山

Java 10月月更

私有分布式账本技术还是公共区块链?

CECBC

【Vuex 源码学习】第九篇 - Vuex 响应式数据和缓存的实现

Brave

源码 vuex 10月月更

VNC服务安装配置与使用

耳东@Erdong

vnc 10月月更

私有云部署系列之动态获取IP(程序执行)

稻草鸟人

Python

这些行业用ERP系统会有很大帮助

低代码小观

企业管理 ERP

BPM软件是什么?BPM软件跟BPA有关联吗?

低代码小观

企业管理 业务流程管理 信息管理

设计微博系统中"微博评论"的高性能高可用计算架构

Rabbit

强化学习RL AWS 自动驾驶DeepRacer ROS 架构 易筋 ARTS 打卡 Week 71

John(易筋)

ARTS 打卡计划

Golang语言HTTP客户端实践

FunTester

golang 性能测试 HTTP 接口测试 FunTester

linux之iftop命令

入门小站

Linux

最长回文子串 -- 三种解答

秦怀杂货店

数据结构 算法 最长回文子串

【LeetCode】无重复字符的最长子串Java题解

Albert

算法 LeetCode 10月月更

虚拟化管理软件比较(Eucalyptus, OpenNebula, OpenStack, OpenQRM,XenServer, Oracle VM, CloudStack,ConVirt)

hanaper

使用 Ansible 部署 Elasticsearch 集群

Se7en

架构实战营模块九作业 - 毕业设计

王晓宇

架构实战营

架构实战课程 模块6作业

Frank

“区块链+农业”推动产业“提档升级”

CECBC

【Flutter 专题】34 图解自定义 View 之 Canvas (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月月更

架构实战课程 模块5作业

Frank

Spring对基于REST的Web Services增加HATEOAS支持_SOA_Jan Stenberg_InfoQ精选文章