联系我们
简单又实用的WordPress网站制作教学
当前位置:网站首页 > 程序开发学习 > 正文

接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook

作者:小教学发布时间:2023-09-17分类:程序开发学习浏览:109


导读:大家好,我是比特桃.目前我们的生活紧紧地被大量互联网服务所包围,互联网上每天都有数百亿次接口调用。是两个设备相互通讯的一种方式,人们在手机上每次指尖的悦动,背后都是接口接口的调用接...

大家好,我是比特桃.目前我们的生活紧紧地被大量互联网服务所包围,互联网上每天都有数百亿次接口调用。是两个设备相互通讯的一种方式,人们在手机上每次指尖的悦动,背后都是接口接口的调用接口。
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook
本文将列举常见的一些接口接口,并阐述它们之间的优缺点及关系。

目录

  • 一、接口类型
    • 1.1肥皂
    • 1.2 REST风格
    • 1.3 GRPC
    • 1.4图形QL
    • 1.5 WebSocket
    • 1.6网钩
  • 二、REST风格的详解
  • 三、图形QL详解
  • 四、GRPC详解
  • 五、接口优化
  • 六、总结

一、接口类型

常用的接口类型有很多,但本文聚焦于http之上的接口接口(通用性)。像tcp传输层之上的其他应用层协议,如mqtt之类的,不在本文的讨论范围.
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook

1.1肥皂

Soap协议基于xml,应用于安全性和可靠性至关重要的金融服务和支付网关,比较适合对数据安全等级较高的场景。
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook

1.2 REST风格

基于JSON的轻量级Web服务,也是目前应用最广泛的API协议。
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook

1.3 GRPC

高性能微服务通讯协议,它是微服务架构最爱.
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook

1.4图形QL

一种客户端可动态定制化的接口协议,它不仅仅是一种接口通讯方式,还是一种查询语言。
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook

1.5 WebSocket

WebSocket是实时通讯的常用手段,基于http协议。关于实时、双向和持久连接的.如果只需要服务器实时推送,也可以尝试同样基于HTTPSSE(服务器发送的事件)。
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook

1.6网钩

自定义远程回调函数,通常用于自动化处理.我们在使用自动化部署Jenkins的时候有用到过:十分钟搞定Jenkins+GitLab+Docker前后端部署
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook
下面我们将详细介绍三个最常用的接口接口:RESTful、GraphQL、GRPC。

二、REST风格的详解

RESTful API在移动互联网时代中有着广泛的应用,因为它足够的轻量(基于json),非常灵活。
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook
REST接口规定了许多标准,比如:统一接口、通讯方式、无状态、可缓存等。遵循REST接口标准的接口称为RESTful接口、为了保障接口接口的可维护性,一般开头会有v1/v2/v3这种类似的版本号。
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook
需要注意的是,url的资源是按名词来命名,而不是动词,比如你可以命名:

https://example.com/api/v3/products

而不是:

https://example.com/api/v3/getALLproducts

这也是很多不规范的REST风格的API最容易犯错的地方,REST API规定,动作是用URI进行的。
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook
HTTP请求头的类型所对应的动作如下表所示,也是我们常说的:CRUD增删改查:

类型动作
邮政创造
到达朗读
更新
删除删除

HTTP常见的返回码对应的含义如下表所示:

数值结果
200个成功
400人请求错误
500人后台错误

此外,还要注意接口接口的幂等性问题。只有在进行POST创建操作的时候是不具备幂等性的,我们要注意客户端的多次请求,所导致的数据重复问题。

三、图形QL详解

Meta公司开发的接口协议,目前Github、Shopify、Ins等均在使用.最大的特点就是灵活性和高效率,对于其产品有复杂数据要求的,提供了很好的选择方案.GraphQL和我们刚刚说的RESTful API有很多相似之处,比如它们都是基于http、均通过url进行统一资源定位、数据传输采用json格式。但GraphQL独有的优势在于,客户端可定制化的选择接口返回的内容,这极大的提高了程序的动态扩展能力.
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook
如果我们一个动作需要多个数据的组合,那在RESTful接口中,可能面临多个请求。但在图形QL中可以在请求头中进行数据定制、图形QL将组织好数据进行返回。
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook
但它也有一定缺陷,一方面是不易进行缓存.GraphQL具有单一入口点,并且默认使用HTTPS POST,会妨碍Http缓存的充分利用。另一方面是因为可以随意自定义数据,这会可能会产生一些危险.

四、GRPC详解

Rpc大家应该不算陌生,远程过程调用远程过程调用。也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的方法.由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据.

GRPC是谷歌2016年年创建的开源远程过程调用框架,它重写了他们过年的内部RPC基础设施并开源出来。Grpc是rpc的一种流行实现,许多组织已采用gPRC作为首选的rpc实现方案.还有opfeign、dubbo这种框架也可以作为rpc的实现方案.
GRPC生态系统的核心是使用协议缓冲区(协议缓冲区)作为其数据交换格式它是一种和语言及平台无关的机制,用于编码结构化数据.
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook
GRPC使用协议缓冲区进行编码并通过线路发送数据。虽然GRPC也可以通过JSON,但协议缓冲区提供了多种优势,使其成为GRPC的首选编码格式。通过定义通讯协议Proto文件,来让微服务之间进行通讯,写好Proto后可以通过工具自动生成不同语言的实现:
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook
之所以GRPC具有超高的性能、协议缓冲区的通讯方案是重点。它是一种非常高效的二进制编码格式,比Json快得多.
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook
另一个高效率的原因是、GRPC构建在http/2之上,以提供大规模的高性能基础。GRPC使用Http/2流,它允许通过单个长期的Tcp连接发送多个消息流。HTTP/2的好处有:多路复用、流优先、二进制协议、服务推送。当然、OpenFeign也可以通过配置使用HTTP/2.
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook
GRPC由于二进制编码和网络优化,效率很高,比JSON快5倍。下图为GRPC通讯的过程:
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook
说了这么多GRPC的好处,那为什么服务端在与客户端通讯的时候没采用GRPC协议呢?这是因为GRPC依赖于对http/2原生较低级别的访问,目前没有浏览器支持GRPC客户端所需的网络请求控制级别。
不过目前可以在代理的帮助下从浏览器进行GRPC调用.这项技术被称为集团-WEB。但是该功能集并不能与GRPC完全兼容.但在移动端其实有在使用,在电量和带宽受限的环境中非常有意义.
接口选择那个接口?REST风格的、图形QL、GRPC、WebSocket、WebHook

五、接口优化

  • 使用缓存,可以采用类似Redis这种工具,将数据进行缓存以提供高效率的通讯.
  • 连接池,使用多路复用技术,用来减少对数据库的访问.
  • 避免N+1查询,当一个接口需要采用多个Sql语句的时候,尝试组合使用一个。
  • 使用分页,减少数据通讯的代价,换取更快的加载速度.
  • 采用json、轻量级的json通讯可以在服务端与客户端中保持平衡.
  • 压缩,可以用Brotli算法对数据进行压缩,许多CDN(内容分发网络)也可以支持压缩.
  • 异步日志记录,当高并发的时候,这类工作可以分发到别的微服务中进行.

六、总结

本文我们了解了基于Http应用层协议之上的,常用六种接口接口:RESTful、GraphQL、GRPC、WebSocket、WebHook。每一个都具有自己鲜明的特色及应用场景,我们应该根据产品以及团队的具体情况才选择使用.没有最好的接口接口,只有最适合的场景及应用。




标签:接口选择那个接口?宁静的图形QLGRPCWebSocketWebHook_比特桃的博客


程序开发学习排行
最近发表
网站分类
标签列表