go-zero 框架下 swagger 使用

安装swagger

https://github.com/go-swagger/go-swagger/releases
在这里插入图片描述
我的运行环境是 centos7 x64, 因此下载swagger_linux_amd64



生成 swagger json 文件

bookstore.api

type (
        addReq {
                Book  string `form:"book"`
                Price int64  `form:"price"`
        }

        addResp {
                Ok bool `json:"ok"`
        }
)

type (
        checkReq {
                Book string `form:"book"`
        }

        checkResp {
                Found bool  `json:"found"`
                Price int64 `json:"price"`
        }
)

service bookstore-api {
        @handler AddHandler
        get /add (addReq) returns (addResp)

        @handler CheckHandler
        get /check (checkReq) returns (checkResp)
}


生成swagger.json 文件
goctl api plugin -plugin goctl-swagger="swagger -filename bookstore.json" -api bookstore.api -dir .

指定Host,basePath api-host-and-base-path, 注意这里的ip,port 是 go-zero开发服务所监听的 ip,port
goctl api plugin -plugin goctl-swagger="swagger -filename bookstore.json -host 192.168.99.196:8088 -basepath /" -api bookstore.api -dir .


通过swagger将api文档以web形式展示,并测试接口

./swagger_linux_amd64  serve -F=swagger  bookstore.json   --port 9088 --host 0.0.0.0  --no-open

注意, --port, – host 参数是定访问doc的ip和端口
–no-open则不会自动打开浏览器(没有安装 X 环境的系统,就需要加上该参数)
详细配置可以通过 ./swagger_linux_amd64 serve --help 查看

查看 api文档, 并测试接口
http://192.168.99.196:9088/docs
在这里插入图片描述

注意:

swagger 测试页面, 可能会报错接口调用失败, 这是CORS(跨域) 的问题,需要在server端设置相应的header 属性, 如下, 是通过 go-zero的中间件, 设置response 的 Access-Control-Allow-Origin
详细的, 可参考 关于跨域自定义header的问题

server.Use(func(next http.HandlerFunc) http.HandlerFunc {
        return func(w http.ResponseWriter, r *http.Request) {
            w.Header().Set("Access-Control-Allow-Origin", "*")
            next(w, r)
        }
    })
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用go-zero进行跨域处理时,可以通过设置相应的header属性来解决CORS(跨域)问题。可以使用go-zero的中间件来设置response的Access-Control-Allow-Origin属性。具体的设置方法如下所示: ```go server.Use(func(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") next(w, r) } }) ``` 此外,在使用到JWT的情况下,可能会遇到一个问题,即当token失效时,axios无法捕获到后端返回的401代码。这是因为go-zero会经过JWT认证中间件,直接返回401错误,并没有经过自定义的跨域中间件,导致请求是跨域的。为了解决这个问题,需要对响应返回进行更改,使其经过自定义的跨域中间件。具体的修改方法如下所示: ```go server := rest.MustNewServer(c.RestConf, rest.WithCustomCors(nil, func(w http.ResponseWriter) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Headers", "*") w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, PATCH") w.Header().Set("Access-Control-Expose-Headers", "Content-Length, Content-Type, Access-Control-Allow-Origin, Access-Control-Allow-Headers") w.Header().Set("Access-Control-Allow-Credentials", "true") }, "*")) ``` 通过以上设置,可以解决go-zero的跨域问题。 #### 引用[.reference_title] - *1* [go-zero 框架swagger 使用](https://blog.csdn.net/h934070878/article/details/120003881)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [gozero设置跨域](https://blog.csdn.net/weixin_42181179/article/details/130366208)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值