NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

数字技术重构产业链供应链比较优势

CECBC

为什么 Golang 正在接管软件行业

云原生

云计算 Kubernetes 云原生 编程语言 Go 语言

编程基础:硬件同步原语

正向成长

CAS 硬件同步原语 FAA

Golang 中的整洁架构

baiyutang

架构 DDD Go 语言 9月日更

什么是可中断锁?有什么用?怎么实现?

王磊

9月日更

新鲜出炉!腾讯3轮面试,拿53k*15offer全仰仗这份Java面试神技

Java 编程 架构 面试 程序人生

全网最新最全面Java程序员面试清单(12专题5000解析)

Java 架构 面试 程序人生 程序

Rust 从 0 到 1

rust

【LeetCode】找到需要补充粉笔的学生编号Java题解

Albert

算法 LeetCode 9月日更

maven-dependency中作用域scope含义

一个大红包

9月日更

【SpringCloud技术专题】「Eureka源码分析」从源码层面让你认识Eureka工作流程和运作机制(上)

洛神灬殇

源码分析 Eureka spring-cloud 9月日更

聊聊Java运算符的那些事

Bob

Java 9月日更

Jira API的踩坑记

FunTester

接口测试 API Jira FunTester 缺陷管理

ServiceWorker工作原理、生命周期和使用场景

devpoint

Service Worker 9月日更

HTML进阶

Augus

html 9月日更

MimeType文件格式速查表

入门小站

工具

让Chrome爽到飞起的5款小众插件!

Jackpop

Vue进阶(幺零五):elementUI 实现表格行列拖拽

No Silver Bullet

Vue 9月日更

每个人都在谈数据治理,每个人都治理不好

奔向架构师

数据仓库 数据治理 9月日更

云南推进“区块链+数据中心”融合发展

CECBC

15. 弱人工智能、强人工智能、超人工智能

数据与智能

人工智能

手撸二叉树之二叉树的所有路径

HelloWorld杰少

9月日更

网络攻防学习笔记 Day131

穿过生命散发芬芳

网络安全 9月日更

linux之type命令

入门小站

Linux

有个码龄 10 年的程序员跟我说:“他编程从来不用鼠标”,我说:

梦想橡皮擦

9月日更

Python顺序结构选择结构

在即

9月日更

深入理解rtmp(一)之开发环境搭建

轻口味

android 音视频 直播 9月日更

【Flutter 专题】51图解动画小插曲之 Flare 动画

阿策小和尚

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

重放浏览器单个请求性能测试实践

FunTester

性能测试 接口测试 测试框架 测试开发 FunTester

统一区块链应用接口,加速新场景落地

CECBC

解决网卡“Device eth0 does not seem to be present, delaying initialization”

耳东@Erdong

9月日更 网卡

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