写点什么

API 已死,APIs 万岁

  • 2020-01-06
  • 本文字数:3417 字

    阅读完需:约 11 分钟

API已死,APIs万岁

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

在本文中,作者将重点介绍 REST API 的统治地位是如何衰退的,以及生态系统是如何走向民主的。API Is Dead – Long Live the APIs!

历史背景

正如我之前在博客中所描述的那样,在一个企业内部,随着时间的推移,技术会分层部署。许多较老的技术仍然能带来价值,使其远未过时。考虑到尽管许多企业正在经历数字化转型,但它们的旧层和深层中所包含的技术和相关数据仍然具有价值。不能简单地将它们移除,因为毕竟是在下面的层才能为放置新柱子奠定基础。这些层中的许多通常都具有遗留接口,如 CORBA、RMI、SOAP 等。


那么,为什么我们要在层上继续添加层呢?如果以古生物学家的身份来探讨这个问题,我们会采集一个核心样本,分析每一层;针对技术也可以来尝试这个方法,并深入到各个层次。每一层都代表一个历史视图,在最顶层 / 最外层,我们可以找到 REST,它是当今最普及的技术。就在 REST 之下,我们会遇到面向服务架构(Service Oriented Architecture,SOA)层。停下来思考下,为什么 REST 取代了 SOA ?虽然原因有很多,但可以说最主要的原因是 REST 极大地简化了客户端可访问性的问题,使用 REST,可以交换的是 JSON 而不是 XML,从而简化了在浏览器中的使用。


此外,REST 还有一个简化的方法,其动词 GET、PUT、POST 等允许使用简单的通用工具,比如 cURL 和 Postman。几乎用任何语言创建自己的客户端都非常简单。

另一方面

虽然该协议与平台无关,但是 SOAP 使用 XML,这使得在浏览器中使用它变得冗长而痛苦。此外,由 WS-* 标准增加的复杂性层意味着编写服务器端很容易,但编写客户端却很痛苦。客户端实现需要使用第三方工具以我们所选择的语言来生成客户端代码,这会产生繁重的依赖关系。


当我们深入研究技术层时,我们会发现类似的情况。SOAP 曾经也是王者,它取代了 CORBA 和 RPC 等技术。REST 从 SOAP 那里夺走了王位,而今天,REST 的王位正受到来自民主呼声的挑战。


谁是能从 REST 手中夺取王位的挑战者呢?有几个有追求的人在觊觎 REST 的王位。这些人可以分为三类:“服务器到客户端”、“基于事件”或“数据访问”家族。就像在《权力的游戏》中一样,挑战者可以按照他们的家族血统来划分(House Targaryen、House Lannister、House Stark 等)

“反向 API”家族:The House of “Reverse API”

这个家族的标志是电话,既是服务器调用客户端,而不能反过来调用。


Webhooks:Webhooks 有时被称为“反向 API”,因为调用的发起方是服务器而不是客户端;服务器将状态变更通知客户端。客户端应用程序注册一个回调 URL,当服务器上的资源发生状态变更时,就可以访问该 URL。客户端应用程序将收到状态变更的 HTTP 负载通知。Webhooks 是一种流行的基于事件的机制,该机制可以在网上找到(GitHub、Stripe、Twilio)。它们不是银弹,因为它们不提供有保证的交付,很少重试,可能会不同步,并且在事件量很大时(可能需要反压机制) 会给客户端带来很大的压力。


WebSocket:WebSocket 是一种传输协议,它通过一个 TCP 套接字连接在服务器和客户端之间建立一个持久的双向通信通道。当服务器到客户端或客户端到服务器需要近实时交换时,WebSocket 是一个不错的选择。这克服了 HTTP 请求 / 响应机制的限制(例如客户端轮询及相关的开销)。WebSocket 适用于需要实时更新的应用程序,因为服务器可以在连接上随时推送数据。所有现代浏览器都支持 WebSocket。


SSE: 服务器发送事件(Server-Sent Events,SSE)是一种服务器推送技术,它允许客户端通过带有内置自动重连机制的 HTTP 连接接收来自服务器的自动更新。服务器发送事件 EventSource API 作为 HTML5 的一部分被进行了标准化。SSE 是通过传统 HTTP 发送的,这意味着它不需要特殊的协议或服务器实现即可正常工作。另一方面,WebSockets 需要全双工连接和新的 Web Socket 服务来处理协议。SSE 适用于不需要从客户端发送数据,但需要通过某些服务器操作进行更新(例如股票行情、共享设施更新、好友状态更新等)的场景。

“事件驱动”家族:The House of “Event-Driven”

这个家族的标志是 Kafka 图标,因为它是“事件驱动”的主导者。


这个家主要由三个字符组成,即两个基于提交日志 Apache Kafka 和 NATS 的消息传递系统,以及 RabbitMQ 的消息队列。这些技术已经成为基于异步事件的微服务架构的实际支柱。基于事件消息传递的架构会导致服务之间的极度松散耦合,这对于事件驱动系统非常有用。在这些架构中,诸如 CQRS(命令查询职责分离)和事件源等不同的设计模式非常流行。因为 JSON 太冗长,发送到队列的消息使用 Proto Buf、Avro 或 Thrift 定义,事件将被内部微服务消费。


由于基于事件的系统是异步的,因此系统本身将具有最终一致性。这导致开发人员不得不处理服务之间的不一致数据。根据所使用的消息传递主干,可能必须考虑接收重复事件、无序事件或丢失事件(保证交付)的处理。与传统的 REST API 相比,可用于基于事件的开发(设计、调试、测试、监控)工具更加不成熟。


有两个新兴项目值得跟踪和投入:


  • 由云原生基金会(Cloud Native Foundation,CNCF)孵化的 CloudEvents 项目正在尝试定义与供应商无关的事件格式,以便在不同的云系统之间进行转换。

  • AsyncAPI 的目标是使事件驱动的架构更简单,并且像 REST API 一样为开发人员所熟悉,它将包括文档、代码生成、发现和事件管理。

gRPC 家族:The House of gRPC

gRPC 的名称中包含了一些线索;“g” 来自 Google 和 RPC,因为它是为远程过程调用(RPC)而设计的。这是 CNCF 的一个顶级项目。gRPC 通常在组织内部使用(即在微服务架构中),这样我们可以控制消费者和提供者。因为它使用了 HTTP 2.0,gRPC 相较于传统的 HTTP 1.1 REST 调用有较高的性能。服务定义是使用了 Proto Buf ,由此,可以用多种语言生成客户端和服务端存根。gRPC 支持双向流和可插拔的身份验证机制。

“GraphQL”家族:The House of “GraphQL”

GraphQL:GraphQL API 适用于移动应用程序,并且有助于避免使用 REST API 时出现的闲聊问题。借助 GraphQL,客户端可以确定它们所需的数据、所需怎样的数据以及所需的数据格式,而无需遍历多个 REST 请求 / 响应来查找应用程序所需的资源。这将减少调用客户端所需建立的网络连接次数,并确保它们只检索所需的数据。如果客户端是移动应用程序或单页应用程序(single-page application,SPA),则可以提供更好的用户体验。2015 年,Facebook 公开发布了 GraphQL 规范和参考实现。但今天,GraphQL 的管理工作由 GraphQL 基金会负责。


为什么说GraphQL是API的未来?

“OData”家族:The house of “OData”

OData:OData(开放数据协议)是一个 OASIS 标准,它定义了构建和使用 RESTful API 的最佳实践。它最初是由微软在 2007 年开发的。OData 是 HTTP、REST 和 JSON 之上的一组通用约定。如果采用这些约定,则意味着 API 提供者最终将以一种标准且一致的方式来处理诸如查询、分页、排序和过滤 API 之类的问题。正是由于这些约定,如果我们看到了一个 OData 服务,那么我们也就看到了所有服务,并且实现消费应用程序变得更加容易。OData API 经常出现在运行 Microsoft 和 SAP 服务的生态系统中。

“IoT”家族:The House of “IoT”

鉴于物联网设备的爆炸性增长,这个家族牢牢地坐落在亿万富翁俱乐部里。


MQTT(消息队列遥测传输): 是一种基于发布 - 订阅的 ISO 标准消息传递协议。它在 TCP/IP 协议之上工作。设计它是用于与需要“小代码占用”的远程位置的连接或我们需要限制网络带宽的情况。因此,对于带宽昂贵且所需开销最小的嵌入式系统等客户端来说,它是一种完美的协议。


AMQP(高级消息队列协议) 是异步通信中最流行的协议之一。RabbitMQ 和 ActiveMQ 是一些流行实现,或者有像 AWS MQ 这样的托管解决方案。AMQP 是面向消息中间件的开放标准应用层协议。AMQP 的主要特点是消息定向、排队、路由、可靠性和安全性。与 MQTT 相比,AMQP 具有更多特性,因此,它更适合在需要更高处理和内存要求的客户端系统上运行。因此,它被视为一个相当繁重的协议,在物联网的传感器 / 嵌入式世界中不能很好地发挥作用。

结论

正如本文所示,REST API /Services 的君主统治已经过去了。所需的 API 技术生态系统将专用于消费客户端应用程序的需求。生态系统中不会只有一个赢家,而是有许多赢家,这取决于客户所需的经验。没有一项技术会永远坐上王位上,这是一种民主,客户决定将由谁来代表他们!


API 已死了——API 万岁!


API is dead,long live the APIs


2020-01-06 12:0011760
用户头像
小智 让所有人认同的文字称不上表达

发布了 408 篇内容, 共 381.6 次阅读, 收获喜欢 1976 次。

关注

评论 1 条评论

发布
用户头像
垃圾文章,MQTT跟API完全是两码事,东拉西扯凑拼的文章。另外,通常喊万岁的,都死得比较早。与译者无关。
2020-01-17 09:10
回复
没有更多了
发现更多内容

华为云Astro低代码平台开启AI敏捷组装时代,探索低代码创新无限可能

轶天下事

会员信息一键同步!微盟与客如云联手打造智能服务新体验!

聚道云软件连接器

案例分享

万界星空科技定制化MES系统,实现数字化生产

万界星空科技

数字化转型 生产管理系统 mes 万界星空科技

小间距LED显示屏市场:新机遇与挑战

Dylan

技术 行业 LED display LED显示屏 市场

iPaaS丨企业应用及数据集成的重要性和挑战

RestCloud

数据集成 ipaas 数据挑战

接入应用内支付服务,提高商业变现效率

HarmonyOS SDK

HarmonyOS

运营海外社媒效率低?试试云手机!

Ogcloud

云手机 海外云手机 云手机海外版 社媒运营 海外社媒运营

百度Feed业务数仓建模实践

百度Geek说

大数据 流批一体 数仓建模 企业号 7 月 PK 榜

基于51单片机设计的电动车控制器

DS小龙哥

7月月更

Databend 开源周报第 152 期

Databend

新加坡工作和生活指北:教育篇

Keegan小钢

教育

Solana近况及解读:Sol链代币DApp开发详解

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

Qualcomm QCN9074 and QCN9024: The Future of High-Speed WiFi 6E Connectivity

wallyslilly

QCN9074 QCN9024

软件测试学习笔记丨Allure2报告中添加用例步骤

测试人

软件测试 测试开发

告别手工录入,企业财务凭证同步迈入智能新时代!

聚道云软件连接器

案例分享

性能测试:性能测试流程与方法

测试人

软件测试

探索无限可能:华为云区块链+X,创新融合新篇章

轶天下事

华为云致力推进全域Serverless时代,引领技术创新,赋能行业实践

轶天下事

智启未来,共筑云上生态,华为云生态领航者·总裁班走进深圳南山

最新动态

WebSocket vs. SSE:哪种实时通信技术更适合你?

Apifox

前端 后端 websocket 实时通信 sse

KubeBlocks v0.9发布啦!API全面升级、支持Redis Cluster、MySQL主备...更多新功能等你发现!

小猿姐

数据库 Kubernetes 云原生

深度解读昇腾CANN内存复用技术,降低网络内存占用

华为云开发者联盟

人工智能 神经网络 华为云 华为云开发者联盟 企业号2024年7月PK榜

MES系统定制 | 生产调度车间排班计划/MES排程排产

万界星空科技

生产管理系统 mes 万界星空科技 排版排产计划

五问五答|看忆联eMMC如何赋能智能电视长效稳定

新消费日报

什么是MES系统?有什么作用?

万界星空科技

制造业 生产管理系统 mes 万界星空科技

API已死,APIs万岁_架构_David Mckenna_InfoQ精选文章