gRPC-GateWay Swagger 实战

这篇具有很好参考价值的文章主要介绍了gRPC-GateWay Swagger 实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一次我们分享了关于 gRPC-Gateway 快速实战 ,可以查看地址来进行回顾 :

也可以查看关于 gRPC 的历史文章:

  • gRPC介绍
  • gRPC 客户端调用服务端需要连接池吗?
  • gRPC的拦截器
  • gRPC的认证
  • 分享一下 gRPC- HTTP网关 I

今天主要是分享关于 gRPC-Gateway Swagger 的实战部分,文章大体分为如下几个部分:

  • 基本环境补充
  • gRPC-GateWay Swagger 实战

基本环境补充

首先,我们来看一下环境搭建完毕和完成实战之后的目录结构

gRPC-GateWay Swagger 实战,gateway

通过目录结构我们可以看到:

  • my_grpcgateway 目录下多了 pkg 目录

这个目录是通过工具生成的,主要是处理 swagger 的 go 文件

  • my_grpcgateway/protoc/order/order.swagger.json

工具生成的 swagger.json 文件,里面记录了关于 swagger 的接口 和 配置相关信息

  • my_grpcgateway/protoc/order/protoc-gen-swagger

protoc-gen-swagger 工具目录

  • my_grpcgateway/third_party

swagger 的资源目录

那么我们就动起手来,一个一个的将上述的内容填充起来吧:

  1. 安装 Protoc Plugin
go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger

执行完毕之后,我们可以在我们的 GOPATH 目录下找到 protoc-gen-swagger 目录

gRPC-GateWay Swagger 实战,gateway

此时,我们将 protoc-gen-swagger 目录拷贝到我们的 my_grpcgateway/order/protoc 下

cd my_grpcgateway/order/protoc 
cp /root/go/pkg/mod/github.com/grpc-ecosystem/grpc-gateway@v1.16.0/protoc-gen-swagger ./ -rf
  1. 下载 swagger-ui 的静态资源

进入地址 :https://github.com/swagger-api/swagger-ui 将项目代码 download 下来

gRPC-GateWay Swagger 实战,gateway

然后再我们自己的项目目录 my_grpcgateway 下创建 third_party/swagger-ui 目录

mkdir third_party/swagger-ui/

最后将上述 swagger-ui 的 dist 目录下的所有内容,拷贝到我们自己的 third_party/swagger-ui 目录下

cp xx/dist/*  my_grpcgateway/third_party/swagger-ui/
  1. 安装必要的静态资源转换包

第一,先下载 go-bindata,用处是 go-bindata 用来将 swagger-ui 的源码转为 GO 代码

go get -u github.com/jteeuwen/go-bindata/...

第二,下载 go-bindata-assetfs,用处是 go-bindata-assetfs 能够结合 net/http 标准库和 go-bindata 所生成 Swagger UIGo 代码两者来供外部访问 ,也就是说 go-bindata-assetfs 可以对外提供文件服务,这样可以通过web访问swagger的 json 文件

go get -u github.com/elazarl/go-bindata-assetfs/...
  1. 在 my_grpcgateway 目录下新建 pkg 目录,并使用工具在 pkg 目录下新增 swagger-ui 涉及的代码
cd my_grpcgateway 
mkdir pkg
go-bindata --nocompress -pkg swagger -o pkg/ui/data/swagger/datafile.go third_party/swagger-ui/...

执行完毕之后,我们就可以在my_grpcgateway/pkg 目录下看到这样的目录结构了

gRPC-GateWay Swagger 实战,gateway

关于环境的看到此处即可,剩下的就来开始 gRPC-GateWay Swagger 实战吧,再次动起手来干

gRPC-GateWay Swagger 实战

本次的 gRPC-GateWay Swagger 实战 是基于上次的 gRPC-GateWay 快速实战的项目代码的

  1. 修改 my_grpcgateway/protoc/order/order.proto 代码

gRPC-GateWay Swagger 实战,gateway

这个时候我们可以关注到,proto 的如下几个变化:

  • 我们新导入了包 import "protoc-gen-swagger/options/annotations.proto";
  • Proto 文件中我们新加入了 swagger 的定义
// 定义swagger内容
option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = {
  info: {
                title: "grpc gateway order sample";
                version: "1.0";
  };
  schemes: HTTP;
};

此处咱们将 schemes 设定为 HTTP 的,本次我们不演示 HTTPS

  1. 使用工具生成 order.swagger.json 文件
protoc -I ./ \
  --go_out ./ --go_opt paths=source_relative \
  --go-grpc_out ./ --go-grpc_opt paths=source_relative \
  --grpc-gateway_out ./ --grpc-gateway_opt paths=source_relative \
  --swagger_out=logtostderr=true:. \
  ./order.proto

上述命令前面几行和之前都是一样的,本次主要是关注这句话

--swagger_out=logtostderr=true:. \

至此,上述环境准备中说到的 4 个变化点,我们都已经准备完毕,下面开始 swagger 相关的代码编写

gRPC-GateWay Swagger 实战,gateway

  1. 编写我们的服务,并把 swagger 加上去
  • 修改 my_grpcgateway/main.go 文件,调用我们的 RunGrpcGwWithSwagger 接口 来启动 grpc-gateway 服务并带上 swagger

gRPC-GateWay Swagger 实战,gateway

  • 修改我们的 my_grpcgateway/server/server.go 文件,新加一个 RunGrpcGwWithSwagger 函数,里面处理 关于 swagger 相关内容

my_grpcgateway/server/server.go

gRPC-GateWay Swagger 实战,gateway

gRPC-GateWay Swagger 实战,gateway

上述代码不难,应用起来也很简单,我们可以看出咱们本次对外提供了 2 个接口

  • http://localhost:9999/swagger/order.swagger.json

访问这个接口,实际上是请求到了 ****order.swagger.json ****文件的具体内容,此处的处理逻辑是 svrSwaggerFile 函数会将 ****swagger.json 过滤出来,并加上相对路径 ./protoc/order/ ,实际上就访问到了我们服务项目目录中的 my_grpcgateway/protoc/order/order.swagger.json

  • http://localhost:9999/swagger-ui/

请求上述接口,我们就可以看到咱们 swagger ui 界面了,这个时候,其实我们看到的接口并不是我们自己写的接口

因此如图中的查询路径目前是默认的

gRPC-GateWay Swagger 实战,gateway

这个时候,我们将搜索框中的内容修改成 http://localhost:9999/swagger/order.swagger.json

gRPC-GateWay Swagger 实战,gateway

此时,我们就可以看到我们自己编写的接口内容了,关于 swagger 我们是可以在 swagger-ui 界面进行接口请求的,这里就简单指引一下,其他的就不赘述的了

第一,点击 Try it out

gRPC-GateWay Swagger 实战,gateway

第二,填写咱们的请求参数

gRPC-GateWay Swagger 实战,gateway

第三,点击 Execute 之后,查看咱们的响应结果

gRPC-GateWay Swagger 实战,gateway

至此,关于 gRPC-GateWay Swagger 实战 就分享到此处,项目代码可以查看:https://github.com/qingconglaixueit/my_grpcgateway_demo

感谢阅读,欢迎交流,点个赞,关注一波 再走吧

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

可以进入地址进行体验和学习:https://xxetb.xet.tech/s/3lucCI文章来源地址https://www.toymoban.com/news/detail-690236.html

到了这里,关于gRPC-GateWay Swagger 实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • golang工程——grpc-gateway 转发http header中自定义字段到grpc上下文元数据

    http header 转发到 grpc上下文 grpc网关可以将请求体内容转发到grpc对应消息中。那如何获取http header头中的信息,本文将介绍如何将http header转发到grpc上下文并采用拦截器,获取http header中的内容。 有些http header中的内置字段是会转发的比如Authorization,但是狠多自定义字段是转发

    2024年02月08日
    浏览(26)
  • gRPC之gRPC Gateway

    etcd3 API全面升级为gRPC后,同时要提供REST API服务,维护两个版本的服务显然不太合理,所以 grpc-gateway 诞生了。通过protobuf的自定义option实现了一个网关,服务端同时开启gRPC和HTTP服务, HTTP服务接收客户端请求后转换为grpc请求数据,获取响应后转为json数据返回给客户端。结构

    2024年02月07日
    浏览(30)
  • SpringCloud+Gateway+Swagger2

    做个笔记,并分享()。。。 学习链接: Spring Cloud Gateway系列【13】 整合knife4j实现网关聚合接口文档_knife4j-gateway-spring-boot-starter-CSDN博客 实现knife4j样式的接口文档;各个模块都加载到gateway; 效果图: 第一步:搭建SpringCloud框架(不具体写步骤了) 第二步:新建一个Gateway模

    2024年02月02日
    浏览(34)
  • gateway 聚合了不同服务的swagger

    2024年02月14日
    浏览(20)
  • 一、SpringCloud+Gateway+Swagger2

    做个笔记,并分享()。。。 学习链接: Spring Cloud Gateway系列【13】 整合knife4j实现网关聚合接口文档_knife4j-gateway-spring-boot-starter-CSDN博客 实现knife4j样式的接口文档;各个模块都加载到gateway; 效果图: 第一步:搭建SpringCloud框架(不具体写步骤了) 第二步:新建一个Gateway模

    2024年01月19日
    浏览(28)
  • Spring Cloud Gateway集成Swagger实现微服务接口文档统一管理及登录访问

    本文将介绍如何在 Spring Cloud 微服务中使用 Swagger 网关来统一管理所有微服务的接口文档,并通过 Spring Security 实现登录后才能访问 Swagger 文档,以确保接口数据的安全访问。 在开始之前,需要假设你已经完成了 Spring Cloud Gateway 的相关配置,并且已经了解了基本的网关配置知

    2024年02月05日
    浏览(33)
  • Spring Cloud Gateway集成聚合型Spring Boot API发布组件knife4j,增强Swagger

    大家都知道,在前后端分离开发的时代,前后端接口对接是一项必不可少的工作。 可是, 作 为后端开发,怎么和前端更好的配合,才能让自己不心累、脑累 ,直接扔给前端一个后端开放api接口文档或者页面,让前端不用看着难受,也不用前端老问你,来愉快的合作呢? 原

    2024年04月22日
    浏览(25)
  • 实战项目 在线学院springcloud调用篇3(nacos,feging,hystrix,gateway)

    结果:   1.nacos的搭建部署 2.vod,edu项目的注册nacos 3.查看 2.4.1 edu配置 1.controller  2.feginclient  2.4.2 vod配置  2.4.3 测试 2.5.1 配置步骤  1.feginclient 2.降级类 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的

    2024年02月11日
    浏览(24)
  • 5.微服务项目实战---Gateway--服务网关,实现统一认证、鉴权、监控、路由转发等

    大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用 这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。   这样的架构,会存在着诸多的问题: 客户端多次请求不同的微服务,

    2024年02月16日
    浏览(33)
  • 云原生之深入解析K8S Istio Gateway服务的架构分析与实战操作

    Istio 提供一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控、网关等功能,而不需要对服务的代码做任何改动。 istio 适用于容器或虚拟机环境(特别是 k8s),兼容异构架构; istio 使用 sidecar(边车模式)代理服务的网络,不需要对业务代

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包