[译]不存在的REST API

原文:There is No REST API    

译者:杰微刊兼职翻译汪建      

作者:Howard Dierking

最近我花了一些时间和我的团队从API的角度来聊了REST的话题,同样也讨论了如何利用诸如违反了REST的最重要原则的Swagger技术去创建API。正如我在讨论中说的,那就是REST风格不是用来描述API。REST描述了整个系统的架构特性,用于描述此该系统包含了所有哪些不同组成的部分。它尝试基于组件对系统提出系统级别的要求,甚至是对系统不起作用的一层。

“我们对于REST风格最大的帮倒忙的行为之一就是我们在REST后面添加了API字眼!”

目前我见过几个不同公司的处理场景,这些公司在最纯粹的定义上将一个服务搭建成REST风格,客户端通过各种方式的使用让系统变得非REST风格。更糟的是,这使得人们更难在跟高层次上阐明REST的价值,因为“REST风格”的API在易用性和长期稳定性方面与RPC这方面的性能并没有明显的差异。事实上,在某些情况下,某些性能会被认为差得多,比如可用性方面。

对于客户端来说,在REST风格和非REST风格的系统之间有两个明显的方式:URL结构和文档结构。

正如我敢肯定的是你听说过广告令人厌倦,避免由客户端构造URL而是由服务端提供连接,这是REST风格的超媒体的核心,这使得服务器真正拥有它的所有资源的名称和位置。从而使其能够独立于它的客户端进行演变。但是,这仅仅当客户端使用服务端提供的连接时才有效,但更多地我比较愿意承认,在客户端真实的编程时他们会忽略服务端连接,而是用基于URL(多次硬编码)的连接在之前的响应体中加上各种数据。Swagger工具(甚至GraphQL)鼓励这种使用它们的URI膜拜和占位符的模式。

客户端和服务器端之间更加隐藏的耦合是涉及到如何领会每个请求和响应的有效负载,在REST理想世界中,客户端和服务器都绑定到一个标准的IANA注册的上下文类型中,而且不会尝试去理解任何超过以上范围的事情,然而这不是我们生活的世界,它无疑不是我们希望生活的世界。业务系统通过他们的性质、域特性等自然结果,即使是在相同的域中的每个系统彼此之间都有稍微不同的方言。无论是对还是错,这些差异是分化多次而作为竞争优势。此外,业务(和支持他的数据视图)可以根据各种因素在响应中快速改变。你可以多频繁地支持标准媒体型的变化?得知它是以年计的你可能不会感到惊讶。

所以,如果一个客户端和服务器不能依赖于绑定到一个标准的内容类型去互相理解他们之间互相传输的数据的话,那他们稳定性还可以依赖什么呢?恩,就像法定货币一样,没有什么。

好吧,这无可否认具有一点戏剧性。但问题是系统的稳定性确实在服务器和客户端之间没有双关语义的用于理解数据的协议。这些规则必须在某处记录起来然后在客户端和服务器进行编码。规则可以用标记或结构化描述语言来记录,并且他们可以直接在代码中、在模式文档中、在混合情况下进行编码,从模式文档中生成代码。对于所有的这些策略、工具、技术,提醒着存在一个“数据合同”(从我的WCF日子中借用此概念)代表客户端和服务端之间互相作用从而使得系统很稳定。任何数据合同的改变必然导致服务契约的改变。在更复杂的联合服务中,其实还是有很多客户端绑定的小数据合同。鉴于这一事实,WSDL和Swagger合并文档模式到API程序描述文档可能是正确的,将模式作为参数的类型(尽管我还是不同意这些大体上的策略)。

当谈及REST时,人们如何构建客户端真的是IMO的核心问题。在实践中,REST风格系统的前提是具有通用的客户端,对于我们正在做的系统这样做可能是不切实际的,市面上为什么只有这么少数量的浏览器的原因是,构建浏览器是很难的。然而,这是因为标准内容类型的复杂性,比如HTML和协议、HTTP和DNS。它可以尽力基于潜在用户而被调整的。就像对于业务系统,甚至是一个很庞大的系统,它更加难以调整类似的。尤其是当需要创建(并获得成功,更广泛的行业支持)一个类似于HTML的标准内容类型时。

所以,当我们讨论API时,也许现在是时候要理智真诚地放弃使用“REST”术语了。这将可以让我们停止围绕着他们是否是真正的REST风格上越包越多,同时使我们能不觉得有必要拿出像“务实REST”条款。或许我们应该着眼于建设可用的Web API。对我们用户来说,可用性是重点。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • 一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式。”但是在要求详细讲述它所提出的各个约束,以及如...
    时待吾阅读 3,408评论 0 19
  • 这世间,风不动,树也不会动,只有人心会动。 希望在20出头的生命里,做一件到八十岁想起来都还会微笑的事 别老低估自...
    她他社阅读 498评论 0 1
  • 三行情书,两行清泪 梦里浮沉,过眼云烟
    弥猫ing阅读 245评论 0 0
  • “繁茂的东山下,美丽的威海湾,有我的乐园码头小学…… ”这首歌是我们的校歌,早上来到学校就会想起这优美的歌声。 进...
    祁鲁阅读 393评论 0 0