纸聊

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 198|回复: 0

了解 REST 的現實替代方案 gRPC 協議

[复制链接]

1

主题

0

回帖

5

积分

新手上路

Rank: 1

积分
5
islamnobin673 发表于 2023-8-30 13:43:50
gRPC 是 Google 开源发布的用于远程过程调用的二进制协议。它是 REST 的替代方案,因其性能和简单性而广受欢迎。 gRPC 通过 HTTP/2 提供全双工连接。目前,它在浏览器中使用时需要适配器,并且作为后端服务最流行。

GRPC 在微服务 墨西哥手机号码列 中特别受欢迎,其中强大的 API 契约和方法抽像有助于降低复杂性。 gRPC 比典型的 REST 堆栈需要更多的前期工作,但对于受益于更结构化方法的组织和大型项目来说可能很有吸引力。



REST、gRPC 的可行替代方案
gRPC 是 REST 的可行替代方案,并且是远程过程调用的最先进技术。它支持多种语言,并为所有主要后端语言和平台的服务器和客户端提供套件。还有一个可在浏览器中使用的 gRPC Web 项目。

在本部分中,您将直接跳转到代码并创建一个与 Node.js 服务通信的 Node.js 客户端。这将使您能够看到通信渠道的双方。 gRPC 使用在 HTTP/2 上运行的二进制协议,支持阻塞和流式请求的多种组合(请求/响应、客户端流式传输、服务器流式传输、全流式双工)。这里看的一个简单示例是请求/响应交互。 gRPC 将此称为“一元”交互,与流式传输不同。

创建节点服务API定义
gRPC 以纯文本形式创建服务定义,然后将它们编译成“存根”。存根是应用程序导入并用于定义服务器和客户端的代码库。从本质上讲,文本定义可以轻松地以人类可读的格式定义端点及其通信,然后将其编译成用于与应用程序内的端点交互的代码库。所有实际的 I/O 工作都由存根完成,代码可以访问 API 定义以添加业务逻辑。

整体流程与其他RPC框架类似。对于学习来说,需要了解的一件重要事情是,客户端和服务之间的所有行为都围绕着这个服务定义。这个定义是API表面,服务器和客户端中的代码运行在这个定义的编译版本上。维护服务定义并将其与代码更改一起迁移的额外步骤在理论上和实践中都会产生开销。然而,将定义集成到 IDE 的构建过程和支持中可以减轻该过程的负担。

首先,我们为基于节点的数字平方服务(如<示例 1>)创建一个 API 定义。

<示例1>节点服务的API定义
语法=“proto3”;

打包我的服务;

// 定义服务 service
NumberSquarer {
  // 用于对数字进行平方的一元 RPC 方法
  rpc SquareNumber(Number) returns (Number) {}
}

// 定义消息类型 message
Number {
  int32 value = 1;
}

<示例1>首先告知gRPC要使用的Protocol Buffers协议的版本。目前最新版本是proto3。现在定义一个名为 myservice 的包。然后有两个块,一个包含服务,一个包含数据结构。该服务的名称是 NumberSquarer,它有一个名为 SquareNumber 的远程过程,该过程接受 Number 类型。该格式在<示例1>中定义,SquareNumber也使用Number作为返回格式。

节点项目设置
只需按照 <示例 2> 中的步骤操作,其中包含启动新节点项目所需的依赖项。请注意,必须安装 Node/NPM。

<示例2> 启动新的gRPC节点项目
$ cd iw-grpc
$ npm init -y
$ npm install @grpc/proto-loader 异步 google-protobuf @grpc/grpc-js

使用定义创建服务器
某些平台(例如 Java)在构建过程中需要编译步骤,但在 JavaScript 中,您可以在运行时进行编译。在 /iw-grpc 目录中,创建 service.proto 文件,其内容如<示例 1>中所示。然后,如示例 3 中所示,我们使用此定义来启动公开平方端点的节点服务器。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|纸聊

GMT+8, 2025-10-18 13:18 , Processed in 0.029114 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表