Amazon选择HAL作为AppStreamAPI的媒体类型

2014 年 3 月 27 日

架构

Amazon 发布了新 API—— AppStream API ,可以使用它通过编程的方式管理托管在 Amazon AppStream 平台上的应用。Amazon 选择使用 HAL 媒体类型构建了该 API。HAL 是一种具有简约超媒体特点的媒体类型,用于构建设备到设备之间的 API。在采用超媒体作为公共产品实现技术的大型企业当中,Amazon 是其中之一。

虽然在 API 领域中,超媒体 API 是一个很热的话题,但其倡导者也经常被问起一个问题,即它在现实世界中的适用范围。针对该技术曾经有过很多研究和讨论,超媒体 API 也是目前 API 生态系统的一小部分。Amazon 的 CEO,Jeff Bezos,以让他的团队使用 SOA 风格构建其产品而出名,最终打造了大量对内和对外的 API。这份对通过 HAL 实现超媒体技术的信任,而且出自一家科技大公司,足以使那些超媒体的支持者精神振奋。

但是超媒体社区当前需要解决一个问题,那就是如何描述超媒体。典型描述超媒体服务的方法是提供一种媒体类型定义,别无其他。但是该方法与其他架构风格明显不同,所以超媒体社区正努力寻找其他策略来弥补该差距。

AppStream API 团队通过四个主要部分来描述 API:头部值、错误码、顶级资源和链接关系。这与传统的 REST 风格服务有所不同,REST 风格服务专注于使用 HTTP 状态码、URL 和参数的组合。但是该方式与传统超媒体方式非常接近。在 HAL 的讨论邮件列表里,HAL 用户在这里讨论 HAL 标准以及其用法,Andrés Freyría Cedeño 这样说道:

我对文档的直觉反应就是沿着这条线往下走,“如果超媒体 API 成为标准,这能充分描述超媒体 API”。基于目前的技术水平,我认为缺乏充分的可供开发人员使用的配套资源。

随着超媒体成为公认的 API 模式,我们看看这种趋势如何继续。

HAL 是一种媒体类型,IETF 正在将其标准化。HAL 最初由 Mike Kelly 创作,致力于向 XML 和 JSON 提供一种简单易懂的公约集合,用于描述资源对另一个资源的链接。

下面是 HAL 响应的样例,摘自标准草案:

复制代码
{
"_links": {
"self": { "href": "/orders/523" },
"warehouse": { "href": "/warehouse/56" },
"invoice": { "href": "/invoices/873" }
},
"currency": "USD",
"status": "shipped",
"total": 10.20
}

HAL 定义了两个预留的顶级属性,_links 和 _embedded。你可以从这里查看_links。在上面的对象中,HAL 标准定义了链接的组成方式。在该样例中,你可以看到虚构的"订单"资源的链接,该“订单”链接到它所存储的仓库和与之相关联的发票。


感谢邵思华对本文的审校。

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

2014 年 3 月 27 日 21:02 638
用户头像

发布了 28 篇内容, 共 66465 次阅读, 收获喜欢 0 次。

关注
架构

评论

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

工作的创新能力

夜来妖

产品 重新理解创业 产品经理 创新突破 创新

【Sentry搭建之 docker-compose】

卓丁

DevOps Docker-compose CI/CD sentry

【译】5 个你需要知道的 JavaScript 小技巧

零和幺

JavaScript 前端 技巧

程序员都惧怕的故障域

松花皮蛋me

Java 问题处理

centos7分区命令parted的用法(大于2T)

唯爱

ARTS 01 - 技术人的理想主义

jerry.mei

算法 Vue 练习 ARTS 打卡计划 ARTS活动

分布式事务 - 理论模型

Java收录阁

分布式事务

洞悉MySQL底层架构:游走在缓冲与磁盘之间

arthinking

MySQL 数据库 MVCC

有的线程它死了,于是它变成一道面试题。

why技术

源码分析 jdk源码 线程池 Java 面试

带你学够浪:Go语言基础系列 - 8分钟学控制流语句

柠檬橙

golang 后台开发

http 四种鉴权方式简介,未来可能还会出现第 5 种鉴权方式:全息生物验证

李艺

HTTP

LeetCode | 2. Reverse Integer 整数反转

Puran

Python C# 算法 LeetCode arts

ARTS打卡week#1

对方正在输入…

ARTS 打卡计划

LeetCode | 1. Two Sum 两数之和

Puran

Python C# 算法 LeetCode arts

坚持ARTS-week2

王钰淇

ARTS 打卡计划

谈谈控制感(13):为什么是旁观者清?

史方远

读书笔记 个人成长 心理学 随笔杂谈

什么时候去面试

escray

游戏夜读 | 如何管理公司?

game1night

路漫漫其修远兮

无心水

同一浏览器只允许登录一个账号

brave heart

Vue 前端

程序员的晚餐 | 6 月 2 日 红烧鸡爪的味道

清远

美食

架构演变之路:为何要搞微服务架构?

arthinking

Kubernetes 微服务 dubbo SpringCloud

重学 Java 设计模式:实战适配器模式

小傅哥

设计模式 小傅哥 重构 代码质量 代码坏味道

Vim使用总结

JDoe

vim

【vue-openlayers】弹窗

学习委员

html Vue 前端 openlayers ol

Java 最新的JDK14.0.1调试成功

程李文华

微信小程序开发 | 如何在小程序中使用自定义 icon 图标

彭宏豪95

微信小程序 学习 编程 前端 IT

SpringBatch系列入门之Tasklet

稻草鸟人

spring SpringBatch 批处理

初识 LeetCode

Puran

LeetCode arts

深入理解JVM内存管理 - 堆和栈

NORTH

堆栈 深入理解JVM VM参数

一文入门JVM虚拟机

Simon郎

深入理解JVM

Amazon选择HAL作为AppStreamAPI的媒体类型-InfoQ