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

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中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

你可能感兴趣的:(Amazon选择HAL作为AppStreamAPI的媒体类型)