在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

超媒体就像跳舞

  • 2014-08-01
  • 本文字数:819 字

    阅读完需:约 3 分钟

为了充分发挥超媒体驱动系统的优势,客户端必须服从服务端的领导,并由服务端来驱动客户端的状态。 Darrel Miller 写了一篇博文,并拿跳舞来与超媒体API 做了一次类比。俗话说得好,探戈需要两个人来跳(it takes two to tango)。

Darrel 描述了如何能快速地让两个人合作起舞,最常见的方式便是让两个人一起针对同一首特定的曲子学习同一套精心设计好的舞步序列。基本上通过这种方式,可以让他们在互相协同的情况下各自完成好自己的舞步。但是这种方式的缺点也显而易见,他们只懂一首曲子且与同一个搭档合作时的舞步。一旦发生变化,就会出现问题。一旦换了新的曲子或换了新的搭档,他们在舞技上的不足就会显现出来。

同样地,当我们消费某个 HTTP API 的时候,应用就好比是一支精心设计的舞蹈。客户端和服务端都知道流程该如何进行。当客户端发起某个 HTTP 请求的时候,它知道服务端会如何做出响应。Darrel 指出这就是我们这二十年来如何构建分布式应用的方式。我们首先对服务端暴露的 API 进行学习,然后将某种复杂的交互模式灌输给我们的客户端,从而去达到消费 API 的目的。

为了真正理解如何跳舞,Darrel 指出必须在播放任何音乐的情况下都能跳舞,而这一切只需要学习一套基本的舞蹈原语就可以完成。当一对夫妇跳舞的时候,一个领舞而另一个跟随引导也是非常重要的。一个起好选择舞蹈原语序列的领导作用,并使用手势和体位来与他的舞伴交流后续的舞步。这中间没有事先确定且尽心设计的序列动作,唯一的约束就是舞蹈的风格。

相应地,对于某个实现了相同原则的 HTTP API,客户端无须再保持对状态的跟踪,它只需要通过理解接收到的消息并信任服务端所给出的必要引导,从而可以简单地跟随服务端的领导。没有影响到资源的那些新的或变化的业务需求将不会对客户端造成影响。根据 Darrel 的判断,当你的 API 具有很多不同客户端的时候,这将是一个非常关键的优势。

Darrel 还在他的 Github 仓库上发布了一个完整的 WPF 示例。

查看英文原文: Hypermedia is like Dancing

2014-08-01 00:091980
用户头像

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

关注

评论

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

【译】JavaScript 代码整洁之道-函数篇

KooFE

JavaScript 大前端 函数 6月日更 整洁代码

Golang channel 通道

escray

学习 极客时间 Go 语言 6月日更

MySQL普通索引的加锁

程序员小航

MySQL 数据库锁

架构训练营模块5作业

Neil43

架构训练营

架构实战营 模块五:学习总结

👈

架构实战营

可落地的积极心态

蛋先生DX

心态 6月日更

商业模式创新

soho

身为程序员 你真的会使用github搜索吗?

madison

GitHub GitHub Pages 高效搜索 搜索技巧

看来,MySQL next-key lock 的 bug 并没有被修复!

程序员小航

MySQL 数据库锁

高级软件工程师必备的五大技能

架构精进之路

6月日更 软素质

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

方堃

模块5作业

wade

#架构实战营

JSON.parse无双引号如何实现转换

吴脑的键客

JavaScript

Go 并发基础

Damon

Go 语言 6月日更

web ssh解决方案——WGCLOUD

王逅逅

zabbix linux运维 运维监控

Go并发编程-channel多路复用

Rayjun

Go 语言 select

音频和视频流最佳选择?SRT协议解析及报文识别

明儿

音视频 协议 流媒体开发

权限与认证:基于JWT的授权实现

程序员架构进阶

架构 JWT 认证授权 28天写作 6月日更

Java 并发编程—— CountDownLatch 应用

Antway

6月日更

架构实战营 模块五:课后作业

👈

架构实战营

使用 Docker 安装并连接 MySQL

程序员小航

MySQL Docker

网络攻防学习笔记 Day36

穿过生命散发芬芳

网络攻防 6月日更

Hadoop实战篇(1)

进击的梦清

大数据 hadoop Linux

模块5 设计微博系统中”微博评论“的高性能高可用计算架构

Chris Cheng

架构实战营

【Vue2.x 源码学习】第五篇 - 数组的劫持

Brave

源码 vue2 6月日更

标识符与保留字(即关键字)

在即

6月日更

3种面向“对象”编程,你是哪一种?

凌晞

架构 研发管理

Python位运算符——详解

在即

6月日更

如果父母依旧辛苦,那我们的成长又有什么意义?

牧小农

故事 父母

MySQL next-key lock 加锁范围是什么?

程序员小航

MySQL 索引 数据库锁 主键

架构实战营 - 模块 5- 作业

请弄脏我的身体

架构实战营

超媒体就像跳舞_REST_Jan Stenberg_InfoQ精选文章