新闻、帮助、产品更新动态

最新的业界新闻,产品系统更新开发动态,帮助教程和活动发布

GRPC: 如何让 gRPC 提供 Restful API 服务?

发布日:2021-10-10 14:35       阅读数:

介绍
本文将介绍如何让一个 gRPC 服务,同时提供 gRPC 和 Restful API。
 
为了能让 gRPC 提供 REST API,我们需要使用 grpc-gateway
使用 rk-boot
rk-boot 是集成了 Gin, gRPC 和一系列流行 Go 语言框架的启动器,用户可以通过 rk-boot 快速启动企业级 Go 语言微服务。
 
先决条件
使用过 GRPC 的用户都应该知道,protocol buffer 文件需要使用相关的命令行,把 .proto 文件编译成 .go 文件。
 
根据不同需要,会使用到不同的命令行文件。以 Go 语言为例,我们需要大致如下几个命令行文件。

除了安装上述命令行,我们还需要根据需要,运行至少4种不同命令来编译 *.proto 文件,非常晦涩难懂。
 
具体操作方式可参考我的前一篇文章:【GRPC: 使用 Buf 快速编译 GRPC proto 文件】
或者访问:【https://rkdev.info/cn/docs/bootstrapper/user-guide/grpc-golang/basic/grpc-gateway/】

安装


快速开始
1.创建 api/v1/greeter.proto

2.创建 api/v1/gw_mapping.yaml

3.创建 buf.yaml

4.创建 buf.gen.yaml

5.编译 proto file

如下的文件会被创建。

6.创建 boot.yaml

7. 创建 main.go



8.文件夹结构

9.验证
rk-boot 会使用同一个端口来映射 gRPC 和 gRPC-gateway,非常方便。

验证 Restful API

验证 gRPC

Gateway server option
rk-boot 有一个 enableRkGwOption 选项,启动之后,会包含如下几个功能。
 
RK 推荐的 server option,提供如下的功能。
rkgrpc.RkGwServerMuxOptions

1.启动 enableRkGwOption
为了能够验证,我们会添加 gRPC 日志拦截器。
 
boot.yaml

2.验证日志

gwMethod, gwPath, gwScheme, gwUserAgent 将会记录到日志中

3.验证传入的 metadata



错误映射
grpc-gateway 中,我们需要了解 gateway 到 grpc 的错误映射,即 http 到 grpc 的错误映射。
 
这是默认的 grpc-gateway 中的错误映射。
GRPC 错误码 GRPC 错误码描述 Gateway(Http) 错误码 Gateway(Http) 错误码描述
0 OK 200 OK
1 CANCELLED 408 Request Timeout
2 UNKNOWN 500 Internal Server Error
3 INVALID_ARGUMENT 400 Bad Request
4 DEADLINE_EXCEEDED 504 Gateway Timeout
5 NOT_FOUND 404 Not Found
6 ALREADY_EXISTS 409 Conflict
7 PERMISSION_DENIED 403 Forbidden
8 RESOURCE_EXHAUSTED 429 Too Many Requests
9 FAILED_PRECONDITION 400 Bad Request
10 ABORTED 409 Conflict
11 OUT_OF_RANGE 400 Bad Request
12 UNIMPLEMENTED 501 Not Implemented
13 INTERNAL 500 Internal Server Error
14 UNAVAILABLE 503 Service Unavailable
15 DATA_LOSS 500 Internal Server Error
16 UNAUTHENTICATED 401 Unauthorized
1.验证错误(标准 Go 语言错误)
根据错误映射,将会返回 500。



2.验证错误(grpc 错误)
我们需要通过 status.New() 来创建 GRPC 错误。我们推荐使用 rkerror 库中的函数来创建错误。

编辑:航网科技   来源:腾讯云

本文版权归原作者所有 转载请注明出处

联系我们

客服部:深圳市龙华区龙胜商业大厦5楼B5区

业务部:深圳市南山区讯美科技广场2栋12楼1202

资质证书

  • Copyright © 2011-2020 www.hangw.com. All Rights Reserved 深圳航网科技有限公司 版权所有 增值电信业务经营许可证:粤B2-20201122 - 粤ICP备14085080号

    在线客服

    微信扫一扫咨询客服


    全国免费服务热线
    0755-36300002

    返回顶部