开工福利|免费学 2200+ 精品线上课,企业成员人人可得! 了解详情
写点什么

unREST 是新的 REST 吗?

  • 2011-07-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-07-12 10:332697
用户头像

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

关注

评论

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

GLM国产大模型训练加速:性能最高提升3倍,显存节省1/3,低成本上手

OneFlow

人工智能 深度学习

IntelliJ中高效重构的 10 个快捷方式

JAVA旭阳

Java

FPGA:逻辑功能的仿真与验证

timerring

FPGA

你知道这个提高 Java 单元测试效率的 IDEA 插件吗

JAVA旭阳

Java

【PHP】英文博客专栏PHP快速入门个人笔记

懒时小窝

php

【腾讯云AI】用1行Python代码识别增值税发票,YYDS

程序员晚枫

Python 人工智能 发票 OCR

CleanMyMac X2024版本值不值得买?

茶色酒

CleanMyMac X CleanMyMac X2023

精华推荐 | 【深入浅出 RocketMQ原理及实战】「底层源码挖掘系列」透彻剖析贯穿RocketMQ的消费者端的运行核心的流程(上篇)

洛神灬殇

RocketMQ 消息队列 原理分析

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

悟空

架构 高可用 高性能 微博评论

我们需要怎样的低代码平台

agnostic

低代码

从任务分配角度来看管理

石云升

极客时间 1月月更 技术领导力实战笔记

影响产品开发决策的认知偏见

俞凡

认知

如何妥善且优雅地做好解聘工作?

石云升

极客时间 1月月更 技术领导力实战笔记

Verilog HDL仿真常用命令

timerring

FPGA

复习前端:浏览器渲染机制

devpoint

DOM CSSOM 渲染树 重绘 重排

技术管理者如何获得下属的认同?

石云升

极客时间 1月月更 技术领导力实战笔记

FPGA:硬件描述语言简介

timerring

FPGA

问题代码定位神器: Git Bisect

俞凡

git

FPGA:Verilog HDL程序的基本结构

timerring

FPGA

企业架构治理指什么,如何做?

涛哥 数字产品和业务架构

架构治理 企业构架

CleanMyMacX4.12.2最新版本更新下载

茶色酒

CleanMyMacX

关于环境变量配置的思考总结

timerring

Go 环境变量

【Redis技术专区】「优化案例」谈谈使用Redis慢查询日志以及Redis慢查询分析指南

洛神灬殇

redis 性能调优 慢查询

极客时间运维进阶训练营第12周作业

独钓寒江

复习前端:前端应掌握的网络知识

devpoint

OSI七层协议 http2 HTTPS协议加密

我总结了写出高质量代码的12条建议

JAVA旭阳

Java

模块六作业

Ryan

架构

会声会影2023和谐版本补丁包下载

茶色酒

会声会影 会声会影2023

OneFlow v0.9.0正式发布

OneFlow

人工智能 深度学习

如何用Know Streaming来查询Kafka的消息

石臻臻的杂货铺

Kafk

如何判断候选人与岗位的匹配程度?

石云升

极客时间 1月月更 技术领导力实战笔记

unREST是新的REST吗?_SOA_Mark Little_InfoQ精选文章