• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Go–integrateswagger

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

现有服务是用micro+protobuf+gRPC。现在每个服务都有个proto文件,完整定义了参数、传递消息及响应结果。主要实现步骤有三步
1. 用.proto文件转换为swagger.json文件
2. 合并所有swagger.json成为一个
3. Serve the API

 

Step 1: .proto文件转换为swagger.json文件

使用工具:https://github.com/grpc-ecosystem/grpc-gateway

Install

protocproto-gen-go的安装略

 
 

Usage

  • 正常写.proto文件
 
syntax = "proto3";
 
package example;
 
message StringMessage {
 
string value = 1;
 
}
   
 
service YourService {
 
rpc Echo(StringMessage) returns (StringMessage) {}
 
}
  • 添加自定义选项到这个.proto文件
 
syntax = "proto3";
 
package example;
 
+
 
+import "google/api/annotations.proto";
 
+
 
message StringMessage {
 
string value = 1;
 
}
   
 
service YourService {
 
- rpc Echo(StringMessage) returns (StringMessage) {}
 
+ rpc Echo(StringMessage) returns (StringMessage) {
 
+ option (google.api.http) = {
 
+ post: "/v1/example/echo"
 
+ body: "*"
 
+ };
 
+ }
 
}
  • 生成 swagger.json文件
 
protoc -I/usr/local/include -I. \
 
-I$GOPATH/src \
 
-I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
 
-I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway \
 
--swagger_out=logtostderr=true:. \
 
path/to/your_service.proto

增加更多的swagger注释

 
import "google/api/annotations.proto";
 
import "protoc-gen-swagger/options/annotations.proto";
   
 
// 概要
 
option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = {
 
info: {
 
title: "go-service"
 
version : "1.0.0"
 
description: "gRPC服务用"
 
};
 
schemes: HTTP
 
consumes: "application/json"
 
produces: "application/json"
 
};
   
 
// 服务介绍,tag
 
service YourService {
 
rpc Echo(RequestById) returns (City) {
 
option (google.api.http) = {
 
post: "/v1/example/echo"
 
body: "*"
 
};
 
option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = {
 
summary: "详情"
 
tags: "example"
 
};
 
}
 
}
   

更多可配置的可参照这里:github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options/openapiv2.proto

Step 2: 合并swagger.json文件

每个proto文件只能生成一个json文件,因此需要把各个json文件合并成一个。
使用工具:https://github.com/go-swagger/go-swagger

Install

 
brew tap go-swagger/go-swagger
 
brew install go-swagger

Usage

主要使用mixin命令

 
swagger mixin {spec1} {spec2}

为了方便可以写个bash脚本,把所有生成的*.swagger.json文件合并起来。

Step 3: Serve the API

 
swagger serve swagger.json
 
swagger serve swagger.json -Fswagger

第一个只能看文档
第二个会引导你打开某链接,实际是swagger ui的live demo
为了“try it out”能成功,不要忘记在swagger.json里加入hostbasePath

服务器上搭就是拉了份swagger UI,把host的url改为了这个swagger.json可以访问的地址,即可。

其它改动:

以前用来生成stub的命令要增加path:

比如,before:

 
protoc -I$GOPATH/src:. --micro_out=. --go_out=. path/to/your_service.proto

after:

 
protoc -I/usr/local/include -I. \
 
-I$GOPATH/src \
 
-I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
 
-I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway \
 
--micro_out=. --go_out=. \
 
path/to/your_service.proto

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go语言时间和时间戳转换发布时间:2022-07-10
下一篇:
强制安装NVIDIA Geforce Go 6200的Vista显卡驱程 - Valens发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap