REST、GraphQL和gRPC是现代网络应用中最流行的三种API开发技术。然而,选择一种并不容易,因为它们都有独特的功能。
在这篇文章中,我将比较和对比REST、GraphQL和gRPC的特点和用途,以帮助你决定你的项目的最佳选择。
REST - 最受欢迎的技术
代表性状态传输(REST)是现代网络开发中最流行的API开发技术。它为数据传输提供了一个无状态的架构。客户端请求包含所有需要的细节来完成请求,而服务器不保留客户端的状态。
REST APIs支持本地HTTP缓存头,并使用HTTP方法(POST、GET、PUT、PATCH和DELETE)来操作数据。任何人都可以很容易地开始使用REST,因为它很简单,学习曲线很浅。
此外,REST很容易扩展和可靠。因此,开发人员可以毫无疑义地选择它作为他们的应用程序。甚至像Twitter、Paypal和Google这样的公司也在其产品中使用REST APIs。
REST的好处
你可以放心地使用标准的HTTP方法实现CRUD操作。
REST已经存在了很长时间,几乎每个开发者都知道如何使用它。
它支持缓存。
它是可扩展的,并提供客户端和服务器之间的分离。
你可以轻松地将它集成到多个应用程序中。
REST的缺点
它有过度获取和不足获取的问题。
它不能维护状态。
它有很大的有效载荷大小。
端点的数量随着应用程序的扩展而急剧增加。
更新数据库模式或数据结构并不容易。
何时选择REST
如果你没有任何特殊要求,REST是最好的选择。例如,如果你是开发新手,使用REST是完美的选择,因为它的学习曲线很浅。此外,它有一个庞大的生态系统,你可以很容易地找到你面临的任何问题的解决方案。
另外,在处理许多请求和有限的带宽时,你最好使用REST。你可以使用它的缓存支持来提高这种情况下的性能。
总的来说,我们不能把REST的使用限制在某些类型的应用程序中。例如,如果你的应用程序明确要求GraphQL或gRPC,你可以使用REST。
GraphQL--一个客户端驱动的标准
GraphQL是2015年推出的一种数据查询语言。它允许开发人员准确定位并获取他们需要的确切数据。与REST相比,GraphQL是一种客户驱动的方法,客户可以决定需要什么数据,如何获取数据和格式。它还解决了过度获取和获取不足的问题,因为客户端可以准确地指出所需的数据。
GraphQL使用查询、变异和订阅来操作数据。
查询 - 从服务器上请求数据。
突变 - 修改服务器端的数据。
订阅 - 在数据更新时获得实时更新。
GitHub是使用GraphQL的最大公司之一。它在2016年从REST切换到GraphQL,这极大地帮助了GitHub的快速增长。
GraphQL的好处
它是高度灵活的,并能精确地提供客户所需的东西。
它没有过度获取和不足获取的问题。
它受到知名语言的支持,包括JavaScript、Java、Python、Ruby和PHP。
它允许定制数据的结构。
一个单一的查询可以包含来自多个资源的字段。
GraphQL的缺点
查询可能很复杂。
它缺乏内置的缓存支持。
与REST相比,学习GraphQL可能是一个挑战。
默认情况下,它不支持文件上传。
何时选择GraphQL
GraphQL是查询有许多记录的数据库的最佳选择。你可以用GraphQL消除过度获取,只检索特定格式的必要数据,以提高应用性能。另外,GraphQL很适合你需要从多个资源汇总数据的情况。
当你不完全了解客户端如何使用API时,你也可以使用GraphQL。使用GraphQL,你不需要在前期定义一个严格的合同。相反,你可以根据客户的反馈逐渐建立起API。
gRPC - 一种以性能为导向的技术
gRPC是谷歌在2016年推出的远程程序调用的进化版。它是一个轻量级的解决方案,使用最小的资源提供最大的性能。
gRPC遵循一种基于合同的通信方法。gRPC使用Protobuf(一种声明性语言)来创建合同,并使用选定的语言为客户端和服务器生成兼容代码。
gRPC支持4种通信方法:
1. 单一的 - 首先,客户向服务器提出一个单一的请求。然后,服务器发送一个单一的响应。
2. 客户端流式 - 首先,客户端向服务器流式传输一系列请求,然后用一条消息通知流式传输结束。最后,服务器发送一个单一的回复。
3. 服务器流 - 首先,客户端向服务器提出一个单一的请求。然后,服务器向客户端发送一个消息流。
4. 双向流 - 客户端和服务器都可以在建立初始连接后的任何时间发送消息。
gRPC的好处
它是开源的。所以开发者可以根据需要修改它。
它支持多种语言,包括JavaScript、Java、C、C++、C#、Kotlin、Python、Go和PHP。
它能够进行负载平衡。
它默认使用HTTP2,以减少与REST APIs相比的延迟。
它以二进制格式序列化数据。
它支持全双工流。
gRPC的缺点
它默认不支持浏览器。
与REST和GraphQL相比,它没有坚实的社区支持。
何时选择gRPC
gRPC是低资源设备间通信的一个很好的选择。例如,物联网设备、智能设备和相机可以从使用gRPC中受益,因为它可以利用最小的资源优化性能。
除此之外,gRPC还可以用于微服务架构中,处理服务之间的通信,因为它可以与用不同语言编写的服务进行通信。
总结
我在这篇文章中讨论了3种最流行的API开发技术,它们的优点、缺点,以及我们应该何时选择它们。我希望你现在已经更好地理解了REST、GraphQL和gRPC,以便为你的应用选择最好的一种。
然而,重要的是要注意,我们不能把一个放在另一个上面,说这个比另一个优越。每一种都有独特的功能,你应该根据你的项目要求来选择一个。
我希望你认为这篇文章对你有帮助。谢谢您的阅读!