写点什么

unREST 是新的 REST 吗?

  • 2011 年 7 月 12 日
  • 本文字数:1188 字

    阅读完需:约 4 分钟

可以这么说,仅仅是提到 REST 这个词就能引起人们的两极分化。有段时间 REST 努力抗击 WS-* 浪潮,随后出现了一个巅峰,这就像一个障碍,REST 开始走下坡路了,人们认为REST有好处但也许没有其他人想象的那么多。抵制对“ REST 拥护者(RESTafarians)”相信的东西照单全收的主要倡导者之一就是 Jean-Jacques Dubray ,他最近发表了一篇文章,讨论他所谓的 unREST 。JJ 是这样开篇的:

自 2007 起,一小撮人告诉整个业界“Web”可以教会大家关于分布式计算的所有东西,我们之前所做的都是错的。四年过去了,我们只能说这一说法仍然未被证实。

JJ 论证的核心是 REST 在设计时考虑了浏览器,任何试图脱离该上下文使用 REST 的做法无疑都是 unRESTful 的:

REST 在设计时考虑了终端用户,操作用户代理:浏览器 […]。任何将 REST 原则应用于代理至服务器(agent-to-server)场景的软件的做法都是错的。[…] 是时候该继续前进了,这种非常规思路的复杂性没有带来一点好处,反而降低了生产力,它强迫所有人手工编码那些在上一种分布式计算范式中唾手可得的东西。

用 JJ 的话来说,REST“并不适用于目前的问题”,“做到 RESTless 很酷”。这意味着什么呢?JJ 列出了一些规则,包括:

  • 定义领域专用统一接口:“不要害羞,忘记那 4 个 HTTP 动词吧,甚至可以定义自己的动词:Query/Do/Notify/Synchronize 就很不错。它意味着你 Web API 中的全部方法都是查询、动作、通知或同步请求类型的。”
  • 规定消息:对于需要相互通信的两个端点,它们必须要能理解所交换的消息。正如 JJ 所说的“能明确标明版本的消息定义对健康的 API 定义来说是必不可少的。消息可扩展性是让分布式计算运作的重要属性。”
  • 规定端点之间的契约,并保证它们被打上版本:端点之间的接口和它们交换的消息是契约的组成部分。JJ 说把机器可读的契约变为只有人类可读的这种做法是行不通的,他相信其结果只能是浪费大量时间。“统一接口并不足以构成契约,它只是契约定义的基础部分。”JJ 坚信要构建“一个健康的 Web API 消费者生态系统”的唯一途径就是使用机器可读的契约,为它们标上版本以保证契约的进化和重用。

归纳起来:JJ 相信有了这 3 条规则我们就拥有了创建成功 API 的基础。他指出这篇文章并非基于自己的突发奇想,在过去的至少十年时间里他都在和基于 Web 的协议打交道,包括 ebXML。你认同他的观点或是他最后的评论吗?

你可以自由选择 unREST,暗地里嘲笑那些要求你对 HTTP 标头、“链接”、7 个首字母缩写(译注:估计是 REST API)惊叹不已的人,他们或许还会带着 REST 传道士的口吻说你其实并不理解 REST。REST 只是一个(恶)梦,unREST 才是你想要做的。

随着人们越来越多地讨论 REST,尤其是在这样的领域里,如果JJ 是对的,那么要改变这些做法就为时已晚了,也有可能它们本身就已经是unRESTful 的了?也许unREST 正在回到那“糟糕的旧时代”?

查看英文原文: unREST as the new REST?

2011 年 7 月 12 日 10:332200
用户头像

发布了 135 篇内容, 共 53.2 次阅读, 收获喜欢 37 次。

关注

评论

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

最长回文子串 -- 三种解答

秦怀杂货店

数据结构 算法 最长回文子串

[ Golang 中的 DDD 实践] 值对象

baiyutang

golang 设计模式 领域驱动设计 DDD 10月日更

架构实战课程 模块5作业

Frank

BPM软件是什么?BPM软件跟BPA有关联吗?

低代码小观

企业管理 业务流程管理 信息管理

企业运维监控管理系统我给推荐行云管家!

行云管家

云计算 运维 运维监控 云管平台

细节理解!阿里内部Java高并发系统设计全彩手册曝光!霸榜GitHub

进击的王小二

Java 架构 高并发 Java性能调优

100台机器上海量IP如何查找出现频率 Top 100?

秦怀杂货店

IP 海量数据 top

【Flutter 专题】34 图解自定义 View 之 Canvas (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月日更

爱奇艺数据质量监控的探索和实践

爱奇艺技术产品团队

监控 数据治理 pingback

华为技术官珍藏版:SpringBoot全优笔记,面面俱到,实在太全面了

Java 架构 面试 微服务 后端

Pandas教程:数据处理基石-数据探索

Peter

Python pandas

云资源是什么意思?有什么特点?

行云管家

云计算 云服务 多云服务 云资源

2021年10月4日Facebook史上最严重宕机复盘分析

郑州埃文科技

ip数据 网络波动 网动仪

Vue进阶(幺贰捌):Vue插槽:slot、slot-scope与指令v-slot应用讲解

No Silver Bullet

Vue 10月日更 插槽

在线2-36任意进制转换工具

入门小站

工具

强化学习RL AWS 自动驾驶DeepRacer ROS 架构 易筋 ARTS 打卡 Week 71

John(易筋)

ARTS 打卡计划

“第三次分配”来了,你会被“分配”吗?

旺链科技

区块链 数字经济 观点分享

新一代容器平台ACK Anywhere,来了

阿里巴巴云原生

阿里云 云原生 ACK Anywhere

KubeVela 1.1 发布,开启混合环境应用交付新里程碑

阿里巴巴云原生

阿里云 云原生 KubeVela

【Vuex 源码学习】第九篇 - Vuex 响应式数据和缓存的实现

Brave

源码 vuex 10月日更

Golang语言HTTP客户端实践

FunTester

golang 性能测试 HTTP 接口测试 FunTester

Pandas教程:数据类型操作

Peter

Python pandas

VNC服务安装配置与使用

耳东@Erdong

10月日更 vnc

【LeetCode】无重复字符的最长子串Java题解

HQ数字卡

算法 LeetCode 10月日更

字节跳动是如何落地微前端的

字节跳动终端技术

字节跳动 微前端 Web应用开发

物理服务器是什么意思?怎么构成?与云服务器有啥区别?

行云管家

云计算 服务器 云服务器 物理服务器

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

Rabbit

私有云部署系列之动态获取IP(程序执行)

稻草鸟人

Python

架构实战课程 模块6作业

Frank

这些行业用ERP系统会有很大帮助

低代码小观

企业管理 ERP

【优化技术专题】「线程间的高性能消息框架」再次细节领略Disruptor的底层原理和优势分析

浩宇天尚

Disruptor 10月日更 异步高性能 高并发处理 性能提升

基于英特尔x86平台构建AI软件生态系统

基于英特尔x86平台构建AI软件生态系统

unREST是新的REST吗?-InfoQ