写点什么

端到端的超媒体 REST API 设计

2015 年 7 月 12 日

Jimmy Bogard 在他的一系列博客帖子中表示:REST 是一种定义良好的架构风格,它能够为我们带来许多益处,但也经常被误用于描述各种各样的Web API。他特别着重描述了实现一个从服务器到客户端的端到端超媒体解决方案所必需的步骤,包括如何选择一种富超媒体的媒体类型(media type)。

Bogard 是一位微软的MVP ,他强调说,REST 以及超媒体这种 REST 的约束会大大提高客户端与服务端 API 设计的复杂性。他认为只有在某些场景中才值得这么做,尤其是在客户端与服务端分别独立进行设计的情况下。如果客户端与服务端代码共存于一个源代码控制库,并且还是同时进行部署的,那么超媒体在这种情况下为他提供不了多少价值。

至于如何选择一种媒体类型,Bogard 认为有这么三种选择:

  • 选择某个现有标准。
  • 对某个现有标准进行扩展。
  • 设计属于自己的媒体类型。

考虑到设计一种媒体类型所需的精力,这已远不是在一个项目中就能够完成的工作了,因此他倾向于尽可能选择一种标准的媒体类型。在对不同的媒体类型的能力进行比较时,他提到了 Mike Amundsen 所设计的 H Factor ,这项工具能够衡量某个媒体类型对于超媒体的支持等级,帮助他做出适合于当前场景的最佳选择。不过,他往往发现所选择的媒体类型无法满足他的所有需求,因此不得不对所缺失的部分进行扩展。

Bogard 认为服务端的设计与实现是非常直观的,这与创建一个纯粹的 JSON API 差别不大,只是增加了一个更丰富的超媒体模型的复杂性。通常来说,包含所选择的媒体类型的 API 在实现之后还要接受调用者的检验,从客户端的角度对其进行验收。

至于客户端方面,Bogard 在文中提到,他所见到的大多数 REST 示例虽然包含了服务端的 API,但往往未能提供实际的实例,使客户端了解如何调用它们。在 Bogard 的示例中,他创建了一个 web 客户端,其中包含了一个基本的导航视图。 视图中包括了一些信息表,用户可通过这些信息配合在服务端响应中所包含的关系与链接查看详细的内容。服务端返回的响应中包括了大量的元数据,为了保持 REST 风格所提供的松耦合能力,客户端必须由这些元数据所驱动。但 Bogard 依然认为,客户端应当为某个特定的目的而设计,要打造一个泛用目的的客户端是非常无趣的。除了使用 jQuery 设计客户端之外,他还描述了如何使用 React 设计并实现客户端,由于 React 带有面向组件的特性,因此在 Bogard 看来,它能够非常完美地配合超媒体的使用。

查看英文原文 Design of a Hypermedia REST API Server and Consuming Client

2015 年 7 月 12 日 08:193392
用户头像

发布了 428 篇内容, 共 150.6 次阅读, 收获喜欢 22 次。

关注

评论

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

图文回顾丨北京「解构云原生:企业数字化转型新支点」沙龙

RancherLabs

k8s rancher

附PPT丨AI和云原生时代的数据库进化之路

dbaplus社群

数据库 云原生

信任的传递——为什么我们需要第三方授权?

ThoughtWorks洞见

证书 身份认证

牵头成立“现代计算联盟”,强大如谷歌也需要组团打怪吗?

脑极体

记一次MapReduce的内存溢出

AI乔治

Java mapreduce 架构 内存溢出

告别消费主义的双12,是华为云12.12会员节真正的意义

脑极体

搭建网站/APP最全准备攻略

前嗅大数据

小程序 建站 APP发布

云南区块链电子发票全面推广啦!

CECBC区块链专委会

区块链 纳税人

传统巨头抢占区块链场景高地 医疗、汽车、金融成为热门赛道

CECBC区块链专委会

区块链 金融

浅谈JDK并发包下面的分治思想及分治思想在高并发场景的运用

AI乔治

Java 架构 jdk 分布式 多线程与高并发

第13周作业

饭桶

Elasticsearch 新机型发布,性能提升30%

小小的一朵云

大数据 elasticsearch Elastic Stack

互联网应用系统常见问题与方案

raox

极客大学架构师训练营

面向全场景模块化设计 京东智联云的服务器部署有多灵活?

京东科技开发者

服务器 云主机

建信金科大咖访谈:金融衍生品定价与建行实践

金科优源汇

金融科技 金融创新

AWS 助力贝壳VR看房走出国门,升级全球居住服务新体验

亚马逊云科技 (Amazon Web Services)

AWS

自建本地电话告警系统

周楠

运维 物联网 监控告警

住建部等六部门:广泛运用区块链等技术,建设智慧物业管理服务平台

CECBC区块链专委会

物业生活

Shell脚本命令常用技巧

MySQL从删库到跑路

shell脚本编写

大咖直播 | Elasticsearch 应用监控管理平台搭建实战

小小的一朵云

大数据 elasticsearch Elastic Stack 监控管理平台

几种常见的研发管理体系,哪种更适合你?

菜根老谭

敏捷开发 研发管理 CMMI IPD

内存问题探微

AI乔治

Java 架构 编程语言 内存 多线程与高并发

即构实时音视频多中心调度设计

ZEGO即构

Java中多线程安全问题实例分析

叫练

Java 多线程 什么是多线程 多线程与高并发

如何在数智化时代少走弯路? 这里有100个案例可以借鉴

京东科技开发者

DevOps 云原生

这才是你需要的C/C++Linux学习路线!

赖猫

c++ Linux 后台开发 服务器开发

静态代码分析工具评估指标及方法

maijun

第十三周学习总结

饭桶

EMAS远程日志 - 移动端问题排查利器

应用研发平台EMAS

阿里云 运维 日志 监控告警 应用

云原生架构-可观测性之 Prometheus 服务自动发现

云原生实验室

Apache顶级项目ShardingSphere — SQL Parser的设计与实现

京东数科风险算法与技术

数据库 开源 中间件

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

端到端的超媒体REST API设计-InfoQ