50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

超媒体就像跳舞

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

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

关注

评论

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

云原生时代微服务架构设计实践

Damon

6月月更

模块八-设计消息队列存储消息数据的 MySQL 表格

凯博无线

C#入门系列(十二) -- 字符串

陈言必行

C# 6月月更

Node.js实用的内置API(一)

devpoint

node.js 全栈开发 InfoQ极客传媒15周年庆

leetcode 47. Permutations II 全排列 II(中等)

okokabcd

LeetCode 搜索 数据结构与算法

使用 select 切换协程

宇宙之一粟

golang 6月月更

InfoQ 极客传媒 15 周年庆征文|position:fixed 虚拟按键触发后无法生效问题分析及解决方案探究

No Silver Bullet

前端 6月月更 InfoQ极客传媒15周年庆 position:fixed

元宇宙是短炒,还是未来趋势?

CECBC

功能标记是什么?一文了解它的作用,以及它的最佳实践

龙智—DevSecOps解决方案

perforce Helix Core 功能标记

OpenMAX (OMX)框架

程思扬

音视频 编解码

提升管道效率:你需要知道如何识别CI/CD管道中的主要障碍

龙智—DevSecOps解决方案

ci CD CloudBees CI/CD管道

统一认证中心 Oauth2 高可用坑

Damon

微服务架构 安全架构 6月月更

疫情居家办公体验 | 社区征文

天黑黑

初夏征文

InfoQ 极客传媒 15 周年庆征文|dubbo+zookeeper与提供者provider、消费者consumer通信原理讲解

No Silver Bullet

zookeeper 架构 dubbo 6月月更 InfoQ极客传媒15周年庆

Linux开发_文件目录操作介绍、创建BMP图片

DS小龙哥

6月月更

银行布局元宇宙:数字藏品、数字员工成主赛道!

CECBC

预解析与作用域

Jason199

js 全局作用域 作用域 6月月更

八大误区,逐个击破(2):性能差?应用程序少?你对云的这些担心很多余!

龙智—DevSecOps解决方案

Atlassian atlassian云版 Atlassian白皮书

设计消息队列存储消息数据的 MySQL 表格

小虾米

「架构实战营」

架构训练模块 7

小马

#架构训练营

加强区块链技术司法应用

CECBC

在M1上体验三星T7移动硬盘的性能

IT蜗壳-Tango

IT蜗壳教学 6月月更

SAP HANA 错误消息 SYS_XSA authentication failed SQLSTATE - 28000

汪子熙

数据库 SAP hana 6月月更 数据库权限

何时使用 Django?与其他开发堆栈的比较

海拥(haiyong.site)

6月月更

【您编码,我修复】WhiteSource正式更名为Mend

龙智—DevSecOps解决方案

代码安全 WhiteSource Mend

BaseDexClassLoader那些事

北洋

6月月更

JavaScript闭包

大熊G

JavaScript 前端 6月月更

模块8作业

KennyQ

『Three.js』辅助坐标轴

德育处主任

canvas three.js 6月月更

InfoQ 极客传媒 15 周年庆征文|必杀技--使用FFmpeg命令快速精准剪切视频

迷彩

前端 ffmpeg 视频剪辑处理 6月月更 InfoQ极客传媒15周年庆

Vue-7-计算属性和方法的区别

Python研究所

6月月更

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