找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 340|回复: 0

应战REST的API:最多见的非RESTful API实例

[复制链接]

2

主题

0

回帖

16

积分

新手上路

积分
16
发表于 2023-4-6 11:06:00 | 显示全部楼层 |阅读模式
来历:知乎



RESTful 设想类似于现代计较机上的图形用户界面——无处不在,可以被以为是究竟上的挑选,但现实上,纷歧定是唯一的挑选。REST固然被很多人以为是山丘之王,但以为它是镇上唯一的玩家是毛病的。
究竟上,更正确的是,RESTful 设想不是最受接待的,而只是最公然的——著名副实在的 API 众多,它们违反了 REST 标准,现实上鞭策了很多成功的 REST API。

应战REST的API:最多见的非RESTful API实例-1.jpg
明天,我们将看看一些最多见的非RESTful API实例,隔离是什么使这些API和系统在RESTful指南之外运转。我们将会商 REST 的其他替换计划,并肯定在设想硬朗的 Web API 时,什么样的标准真正重要......
界说 REST

在我们深入探讨这个主题之前,让我们真正界说什么是 REST,以及它若何利用于 API。对于很多 API 爱好者来说,这是根基常识,但很多人会惊奇于在常见用法中经常误解或曲解很多常见术语和概念。
在干界说中,REST代表具象状态传输,专注于无状态的客户端 - 办事器通讯,凡是是经过HTTP,正如Roy Fielding在他最初界说REST的开创性论文中所界说的那样。在现实利用中,REST凡是意味着要复杂很多。
首先,关于 RESTful 客户端发出的挪用。RFC 7231 指出,“假如请求方式界说的语义本质上是只读的,则它们被以为是'平安的'。
幂等性是一种希奇的野兽,但它是 RESTful API 的扩大平安性和功用的根本。要实现幂等,对 API 的多个不异请求应发生与单个请求不异的影响。RESTAPITutorial将阳痿界说为“客户端可以反复停止不异的挪用,同时发生不异的成果。 例如,具有购物车增加函数的 API 不应包括带有购物车修饰符的 GET 请求,以下所示:
https://nordicapis.com/addToCart?cart=1234&item=5678此挪用在每次运转时增加一个附加项,这违反了 REST 原则。此函数限制在任何函数中都是不异的,不管是请求附加数据、点窜办事器端存储数据还是建立办事器缘由(即建立身份考证和授权参数数据)。可是,该法则也有破例:对于经过HTTP工作的REST API,请记着DELETE不服安,但幂等的,POST和PATCH都是平安的,但并不总是幂等的。
Fielding说:“REST API不应当依靠于单一的通讯协议。“ REST 的全数意义在于经过由超文本驱动的状态引擎建立静态利用法式状态,以便于利用和传输。正如Fielding所描写的那样,“假如利用法式状态的引擎(以及API)不是由超文本驱动的,那末它就不成能是RESTful的,也不能是REST API。
最初,也许也是最重要的一点,RESTful 设想应当依靠于客户端和供给者之间的一种自觉通讯。用户必须仅利用单个 URI 或 URI 调集进入握手和通讯进程,然后显现经过办事器属性为其交互天生的选项列表。从底子上说,REST,虽然它的名字中有“state”,但在技术上是无状态的——办事器不会在办事器端存储客户端会话的状态,而是依靠客户端来存储该数据,并在需要时将其传递给办事器。
斟酌到一切这些,有哪些非RESTful API的优异案例?
利用印象笔记的复杂数据

当RESTful设想方式解体时,一个很好的例子是在Evernote生产力利用法式套件中。REST在处置数据时很是擅长,可是它处置复杂数据传输的方式存在底子缺点。
RESTful 方式中的每个数据块都由底层办事的控制流夸大,是以,RESTful API 经常面临庞大的瓶颈。这个题目在大型数据集合是如此极端,以致于一些构造,如新加坡惠普尝试室的办事平台尝试室,已经设想了全部系统来更好地限制数据工作流程。
但是,Evernote并没有在沉船上修补一个洞,而是竭尽尽力地将一个不RESTful的处理计划间接烘焙到代码中。经过依靠Apache Thrift,而不是REST API标准规定的HTTP,数据传输的效力要高很多。
利用 Thrift 还开放了 API 来处置本机绑定,而不是在每个客户端上处置每个关系和代码交互。无需担忧剖析和封送代码,消除了根基交互级此外很多毛病。
最重要的是,Evernote 想法避免了在 RESTful 状态下设想时出现的很多兼容性毛病。明天开辟的客户端将与几年前的客户一路工作,五年后,这些当前客户将在未来的订正中运转,没有任何题目。
SOAP 中的协议

REST也不是唯一的玩家。SOAP 或简单工具拜候协议是 REST 的替换品,就其本质而言,作为操纵者是不兼容的。虽然 REST 可以利用 SOAP Web 办事,但 SOAP 作为一种协议不能被界说为 RESTful。
斟酌 SOAP 和 REST 之间区此外最好方式是从邮件交换的角度来斟酌它。SOAP就像一个信封,而REST就像一张明信片。虽然 REST 是精简、清洁和有用的,但 SOAP 的开销要大很多。另一方面,您可以在信封中包容更多内容,就像您可以在明信片中一样。
这在功用上意味着,虽然 SOAP 更重,开销更大,凡是是是一个更平安的挑选,特别是在必须规定正式协议和交互时。
SOAP 优于 REST 的一个很好的例子是 SOAP API PayPal。由于PayPal生态系统完全依靠于与特定平安架构的契约通讯,是以 SOAP 处理计划比 RESTful 处理计划更成心义。虽然大部分数据都记录了用户名和密码,以及进程 ID 和事务信息,但这现实上是一个益处,由于此进程将事务和交互记录到唯一标识符中。
作为旁注,PayPal API 做了一些很是有用的工作,很多 API 都避开了。PayPal API 的设想假定正在处置的任何数据都是 Unicode UTF–8 格式,并以该格式返回数据。这涵盖了国内和国际买卖和交互,对于避免 API 中的毛病和其他题目相当重要。
话虽如此,PayPal API 也是一个很好的例子,说明 REST 若何被“黑客入侵”以获得接近不异的益处。SOAP API 被开辟职员视为遗留的,其中一些功用集在 REST 中复制:
“我应当指出,PayPal有 REST API 的成长,我们的 SOAP 支持被以为是遗留的......此外,合约可以利用Swagger/RAML/Apiary/etc+JSON Schema经过REST强迫履行,虽然有些分歧。
特定于操纵和 CRUD 违规

当尽能够接近一个简单的短语时,REST结果最好 - CRUD。建立、检索、更新和删除。当API具有简单的交互时 - 例如Facebook API的情况,用户需要建立时候线帖子,检索其他人的帖子,更新自己的帖子并删除他们的帖子 - REST便可以了。
操纵是焦点而不是资本时,题目就来了。对于 REST,CRUD 的运作理念是资本是必须点窜和可扩大的——在处置事务或点窜非静态数据的 API 中,SOAP 更合适。
一个很好的例子是Windows Communication Foundation (WCF) SOAP API。此 API 不但答应实时操纵正在操纵的数据,还答应对其履行的操纵。正是这类模块化和特定于操纵的功用使 SOAP 如此强大,而且是匹敌 REST 的不错挑选。
更具体地说,在这类情况下,SOAP 填补了在 REST API 标准中支持超媒体作为原则题目标想法与处置不需要关系链接的简单原始数据的现实之间的风趣空缺。声明报价或天生票证号的操纵很是简单,以致于建立一个 RESTful API 来履行此操纵是浪费的,而且当与大量报价请求或收条天生配对时,绝对站不住脚。
有那末重要吗?

一切这些都引出了一个题目,即它能否那末重要。简单的答案是“视情况而定”。当 API 违反 REST 等标定时,下认识的反应是说办事有题目。在很多人眼中,违反REST标准已经成为一条负面的线,代表着陌生或幼稚的成长方式。
REST 与 SOAP 的争辩更多的是关于款式,而不是关于函数或形式。撇开气概和效力不谈,在 SOAP 中完成的任何操纵都可以在组成 REST 开辟主体的各类说话、语法和方式中完成,一样,在 REST 中可以完成的任何工作都可以在 SOAP 中的某些设置中完成。
正如一个开辟职员不会以为golang中的API比用Python开辟的API更幼稚一样,API天下也应当从对REST的狂热酷爱中退后一步——最少在有需要的时辰是这样。重要的是 API 在权重、处置速度和处置的数据范例方面的具体要求。
结论

unRESTful API 比人们设想的要普遍很多,虽然无线电三言两语表白并非如此。凡是被夸张地表述为“现代和现代”之间的区分,这凡是是气概的争辩,而且按照数据范例和系统需求而高度可变。
固然,在某些情况下,数据公布者或贸易实体的需求几近都需要特定的 REST 格式。对于这些情况,REST 是一种约束,而不是一种功用,而且是必须为合规性而做的工作。例如,这并不意味着物联网或医疗保健行业的一切工作最好用REST完成 - 它只是意味着那些为之建立系统的人偏向于在REST中完成它。假如 SOAP 更合适,大概 REST 之外的任何变体更合适,则款式应由答应的内容决议。
接管 SOAP、RPC 和其他 unRESTful 处理计划只会使全部生态系统受益,为现有系统缔造新的更好的替换计划。其他明显增强 REST 的处理计划,如 GraphQL,也一样有益——我们将鄙人一篇文章中揣度这一究竟。过度关注 REST 能够会发生相反的负面影响。
参考:Kristopher




原文地址:https://zhuanlan.zhihu.com/p/619369244
免责声明:
1、文章部分图片源于收集,均为表示图;
2、一切文章、图片、音频视频文件等材料版权归版权一切人一切;
3、因非原创文章及图片等内容没法和版权者联系,如原作者或编辑以为作品不宜上网供阅读,或不应无偿利用,请实时告诉我们,以敏捷采纳适当办法,避免给双方形成不需要的经济损失;
4、本页面内容由爬虫法式自动收集于互联网,如无意中加害了媒体或小我的常识产权,请电邮【E-Mail:cb@yoyodoc.com】告之,我们将于24小时内删除。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|小悠文档创作分享社区 ( 粤ICP备11072215号 )|网站地图

GMT+8, 2024-11-21 18:21 , Processed in 0.219841 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表