来源:InfoQ
本文讨论了四种主要的API架构风格,比较它们的优缺点,并重点介绍每种情况下最适合的API架构风格。
两个单独的应用程序需要中介程序才能相互通信。因此,开发人员经常需要搭建桥梁——也就是应用程序编程接口(API),来允许一个系统访问另一个系统的信息或功能。
为了快速、大规模地集成不同的应用程序,API使用协议或规范来定义那些通过网络传输的消息的语义和信息。这些规范构成了API的体系结构。
在过去,人们已经发布了多种不同的API架构风格。每个架构风格都有它独有的标准化数据交换的模式。这一系列的API架构风格的选项,引发了大量的关于哪种架构风格才是最好的争论。
不同时间的API架构风格,图源:RobCrowley今天,许多API的使用者将REST称作“消亡的REST”(RESTinpeace),并且为GraphQL感到欢欣鼓舞。而十年前,又完全是另一幅光景:REST是替代SOAP的赢家。这些观点的问题在于,它们的出发点只是为某种技术背书,而不是去考虑它实际的属性和特性如何与当前的需求相匹配。
四种API架构风格1.RPC:调用另一个系统的函数远程过程调用是一种允许在不同上下文中远程执行函数的规范。RPC扩展了本地过程调用的概念,并将其放在HTTPAPI的上下文中。
最初的XML-RPC是存在问题的,因为很难确保XML有效负载的数据类型。因此,后来RPCAPI开始使用一个更具体的JSON-RPC规范,该规范被认为是SOAP的更简单的替代方案。gRPC是Google在年开发的最新RPC版本。gRPC可插拔支持负载均衡、追踪、运行状况检查和身份验证,它非常适合连接不同的微服务。
RPC的工作机制客户端调用一个远程的过程,将参数和附加信息序列化为消息,然后将消息发送到服务端。服务端在接受到消息后,将信息的内容反序列化,执行所请求的操作,然后将结果发送回客户端。客户端和服务端各自负责参数的序列化和反序列化。
远程过程调用的机制,图源:Guru99RPC的优势简单直接的交互。RPC使用GET来获取信息,使用POST来处理其他所有操作。服务端和客户端之间交互的机制归结为调用端点并获得响应。
易于添加新函数。如果API有了新的需求,我们可以轻松地添加另一个执行这个需求的端点:1)编写一个新函数,并将其放在一个新端点之后;2)现在,客户可以访问这个端点,并获取符合其需求的信息。
高性能。轻量级的有效负载不会对网络产生压力,以此提供高性能,这对于共享服务器和在工作站网络上执行并行计算非常重要。RPC还能够优化网络层,使得不同服务之间每天发送海量消息变得非常高效。
RPC的不足和底层系统紧密耦合。API的抽象级别有助于其可重用性。API与基础系统的耦合越紧密,对其他系统的可重用性就越差。RPC与基础系统的紧密耦合不允许其在系统函数和外部API之间建立抽象层。这很容易引起安全问题,因为关于基础系统的细节实现很容易会泄漏到API中。
RPC的紧密耦合使得可伸缩性要求和松散耦合的团队难以实现。因此,客户端要么会担心调用特定端点的带来的任何可能的副作用,要么需要尝试弄清楚要调用的端点,因为客户端不了解服务器如何命名其函数。
可发现性低。在RPC中,无法对API进行检验总结,或者发送请求来开始理解根据需求应该调用哪个函数。
函数爆炸性增长。创建新函数非常容易。因此,相较于重新编辑现有的函数,我们会倾向于创建新的功能,最终产生大量难以理解的、功能重叠的函数。
RPC的用例RPC模式在八十年代开始使用,但这并不意味着它已经过时了。诸如Google、Facebook(ApacheThrift)和Twitch(Twirp)这样的大公司如今正在内部使用高性能的RPC版本,来执行极高性能、低开销的消息传递。它们庞大的微服务系统要求内部通信在使用短消息的情况下也保持清晰。
命令API。RPC是用于将命令发送到远程系统的正确选择。例如,SlackAPI是非常以命令为中心的:加入频道、离开频道、发送消息。因此,SlackAPI的设计者以类似于RPC的样式对其进行了建模,使其小巧、紧凑并且易于使用。
用于内部微服务的客户特定的API。由于是在单个提供者和单个使用者之间建立直接的集成,我们不想像RESTAPI那样,花太多时间通过网络传输大量的元数据。凭借高消息速率和消息性能,gRPC和Twirp成为了用于微服务的可靠用例。通过在底层使用HTTP2,gRPC能优化网络层,使其非常高效地在不同服务之间每天传送大量信息。然而,如果你并不是要着眼于提高网络性能,而是要在发布高度独立的微服务团队之间建立一个稳定的API联系。REST就能做到。
基于SpringBoot+MyBatisPlus+VueElement实现的后台管理系统+用户小程序,支持RBAC动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。
项目
转载请注明:http://www.0431gb208.com/sjszyzl/380.html