照片由FlorianKrumm在Unsplash上拍摄
一旦我了解了gRPC和Thrift,就很难再回去使用更过渡的基于JSON的RESTAPI或SOAPAPI。
两个著名的RPC框架gRPC和Thrift有很多相似之处。
前者来自Google,后者来自Facebook。
它们都易于使用,对多种编程语言都有良好的支持,并且都是高性能的。
最有价值的功能是多语言代码生成和服务器端反射。
这些使得API本质上是类型安全的。
服务器端反射可以更轻松地探索API的架构定义,而无需阅读和理解实现。
ApacheThrift历来是一个流行的选择。
然而,近年来,由于缺乏Facebook的持续支持以及fbthrift的分叉,它逐渐失去了人气。
同时,gRPC已经赶上了越来越多的功能,并拥有更健康的生态系统。
gRPC、fbThrift和ApacheThrift之间的GitHub明星历史记录。
https://star-history.com
截至目前,没有充分的理由考虑Thrift,除非您的应用程序以某种方式隶属于Facebook。
GraphQL是Facebook发起的另一个框架。
它与上面的两个RPC框架有很多相似之处。
移动API开发的最大痛点之一是一些用户从不升级他们的应用程序。
因为我们想要保持向后兼容性,所以我们要么必须保留API中旧的未使用字段,要么创建API的多个版本。
GraphQL的一个动机就是解决这个问题。
它被设计为一种“查询语言”,允许客户端指定其需要的数据字段。
这使得处理向后兼容性变得更容易。
GraphQL在开发移动API以及面向公众的API(例如GitHub)方面具有巨大价值。
因为,在这两种情况下,我们都无法轻易控制客户的行为。
但是,如果我们正在为Web前端构建API或为内部后端服务构建API,那么选择GraphQL而不是gRPC几乎没有什么好处。
以上是迄今为止网络框架的一个小概述。
除了网络之外,我们还需要决定应用服务器的语言。
根据StackOverflow调查:“六年来,Rust一直是最流行的语言。
”尽管学习曲线相对陡峭,但其类型安全性、优雅的内存管理、广泛的社区支持和性能使其成为后端服务开发中非常有吸引力和有前途的编程语言。
Rust是最流行的语言。
2021年Stackoverflow调查
我们也开始看到Rust在业界得到越来越广泛的采用:Facebook、Dropbox、Yelp、AWS、Google等。
很明显,Rust将继续发展并在这里留下来。
这就是我们今天教程中要讨论的内容——在Rust中使用gRPC构建小型服务器。
使用以下命令安装Rust:
如果您之前安装过Rust,我们可以通过以下方式更新它:
让我们仔细检查rustc(已安装的版本)Rust编译器)和cargo(Rust包管理器):
有关安装的更多信息,请参阅https://www.rust-lang.org/tools/install。
运行以下命令来创建一个新的“HelloWorld”项目:
让我们编译并运行该程序:
这显示了到目前为止我们的文件结构:
gRPC使用协议缓冲区来序列化和反序列化数据。
.proto让我们在一个文件中定义服务器API。
我们定义一个书店服务只有一种方法:提供图书ID并返回有关该图书的一些详细信息。
我们将使用tonic来创建gRPC服务。
将以下依赖项添加到Cargo.toml文件中:
要从bookstore.proto生成Rust代码,我们在crate的build.rs构建中使用tonic-build脚本。
将以下内容添加到build.rs文件中:
特别要注意的一件事是,我们添加了.out_dir("./src")以便更改默认值输出目录更改为此src目录,以便我们可以更轻松地查看本文中生成的文件。
在我们准备编译之前还有一件事。
tonic-build依赖ProtocolBuffers编译器将.proto文件解析为可以转换为Rust的表示形式。
让我们安装protobuf:
并仔细检查protobuf编译器是否安装正确:
准备编译:
有了这个,我们应该src/bookstore.rs生成一个文件。
此时,我们的文件结构应如下所示:
最后,是时候将服务组合在一起了。
将main.rs替换为以下内容:
正如我们所见,为了简单起见,我们实际上并没有为书籍设置数据库。
在这个端点中,我们只是返回一本假书。
运行服务器的时间:
太棒了,我们已经在Rust中启动并运行了gRPC服务器!
正如一开始提到的,gRPC最初给我留下了深刻的印象是因为它能够进行服务器反射。
不仅在业务开发时方便,也让与前端工程师的沟通更加轻松。
因此,在不解释如何为Rust服务器添加它的情况下结束本教程是不完整的。
将以下内容添加到依赖项:
更新build.rs。
需要更改的行标有//Addthis注释。
最后,将main.rs更新为以下内容。
可以使用gRPCServer的GUI客户端有很多,比如Postman、Kreya、bloomrpc、grpcox等。
为了简单起见,我们将使用命令行工具grpc_cli。
安装:
并测试我们的第一个gRPC端点:
看起来可行!我的朋友们,这就是我们在Rust中构建gRPC服务器的方式。
今天就这样。
感谢您的阅读并祝您编码愉快!与往常一样,源代码可在GitHub上获取。