[goa]golang微服务框架学习(三)-- 使用swagger-ui展示API
既然goa框架自动生成啦swagger-json文件,那么如何用swagger-ui展示出来呢?
这里分三步:
1.下载swagger-ui的web代码
2.添加swagger.json 和 swagger-ui资源的导出
3.main.go里面mount这两个资源,然后编译启动程序,访问即可
为什么连swagger-ui一并导出?因为在swagger-ui中的test程序,需要请求api,如果时部署在不同端口,会有跨域请求问题(这个坑我踩了)。
跨域请求解决有很多方法:
1)把所有api设置为可接受跨域请求
2)把程序和swagger-ui部署到同一个域名下(或者设置代理访问)
3)其它
这里选择了第2种方法(顺便使用goa里面到Files这个controller)。
不多废话,继续。。。
1.下载swagger-ui的web代码
直接从swagger-ui的git上拉下来,然后我们要用的就是dist目录里头的文件。
2.添加swagger.json 和 swagger-ui资源的导出
package design import (
. "github.com/goadesign/goa/design"
. "github.com/goadesign/goa/design/apidsl"
) //这里的host会生成swagger host
var _ = API("adder", func() {
Title("The adder API")
Description("A teaser for goa")
Host("localhost:8080")
Scheme("http")
}) var _ = Resource("operands", func() {
Action("add", func() {
Routing(GET("add/:left/:right"))
Description("add returns the sum of the left and right parameters in the response body")
Params(func() {
Param("left", Integer, "Left operand")
Param("right", Integer, "Right operand")
})
Response(OK, "text/plain")
})
Action("des", func() {
Routing(GET("des/:left/:right"))
Description("des returns the sum of the left and right parameters in the response body")
Params(func() {
Param("left", Integer, "Left operand")
Param("right", Integer, "Right operand")
})
Response(OK, "text/plain")
})
})
//这里,添加josn和swagger-ui的资源导出
var _ = Resource("swagger", func() {
Origin("*", func() {
Methods("GET") // Allow all origins to retrieve the Swagger JSON (CORS)
})
Files("/swagger.json", "swagger/swagger.json")
}) var _ = Resource("swagger-ui", func() { //建立静态httpserver
Files("/swagger-ui/*filepath", "swagger-ui/")
})
然后重新生成代码:
~/gocode/src/playgoa/demo$ goagen bootstrap -d playgoa/demo/design
这个时候,会有两个新的文件:
swagger.go
swagger-ui.go
3.main.go里面mount这两个资源,然后编译启动程序,访问即可
然后,需要修改main.go文件
package main import (
"playgoa/demo/app" "github.com/goadesign/goa"
"github.com/goadesign/goa/middleware"
) func main() {
// Create service
service := goa.New("adder") // Mount middleware
service.Use(middleware.RequestID())
service.Use(middleware.LogRequest(true))
service.Use(middleware.ErrorHandler(service, true))
service.Use(middleware.Recover()) // Mount "operands" controller
c := NewOperandsController(service)
app.MountOperandsController(service, c) //add swagger
s := NewSwaggerController(service)
app.MountSwaggerController(service, s) //add swagger-ui
sui := NewSwaggerUIController(service)
app.MountSwaggerUIController(service, sui) // Start service
if err := service.ListenAndServe(":8080"); err != nil {
service.LogError("startup", "err", err)
}
}
然后编译程序:
~/gocode/src/playgoa/demo$ go build -o playgoa
这里别忘记了把swagger-ui中的dist目录下的所有文件,copy到demo目录下的swagger-ui下哦
qingping.zhang@bogon ~/gocode/src/playgoa/demo$ ll
total
drwxr-xr-x qingping.zhang staff : app
drwxr-xr-x qingping.zhang staff : client
drwxr-xr-x qingping.zhang staff : design
-rw-r--r-- qingping.zhang staff : main.go
-rw-r--r-- qingping.zhang staff : operands.go
-rwxr-xr-x qingping.zhang staff : playgoa
drwxr-xr-x qingping.zhang staff : swagger
drwxr-xr-x qingping.zhang staff : swagger-ui
-rw-r--r-- qingping.zhang staff : swagger-ui.go
-rw-r--r-- qingping.zhang staff : swagger.go #在这里。。。
qingping.zhang@bogon ~/gocode/src/playgoa/demo$ ll swagger-ui
total
drwxr-xr-x qingping.zhang staff : css
drwxr-xr-x qingping.zhang staff : fonts
drwxr-xr-x qingping.zhang staff : images
-rw-r--r-- qingping.zhang staff : index.html
drwxr-xr-x qingping.zhang staff : lang
drwxr-xr-x qingping.zhang staff : lib
-rw-r--r-- qingping.zhang staff : o2c.html
-rw-r--r-- qingping.zhang staff : swagger-ui.js
-rw-r--r-- qingping.zhang staff : swagger-ui.min.js
启动运行./playgoa
然后访问:http://localhost:8080/swagger-ui/index.html 就可以看到效果了。
[goa]golang微服务框架学习(三)-- 使用swagger-ui展示API的更多相关文章
- [goa]golang微服务框架学习--安装使用
当项目逐渐变大之后,服务增多,开发人员增加,单纯的使用go来写服务会遇到风格不统一,开发效率上的问题. 之前研究go的微服务架构go-kit最让人头疼的就是定义服务之后,还要写很多重复的框架代码, ...
- [goa]golang微服务框架学习(二)-- 代码自动生成
之前用过go语言的反射来做一些代码生成,参考这篇. 但是这种方式,入侵太强,需要执行对应的申明调用, 所以对GOA框架的自动生成非常感兴趣,于是仔细研究了一下,发现用的比较巧妙, 这里先卖个关子,先看 ...
- 【GoLang】golang 微服务框架 go-kit
golang-Microservice Go kit - A toolkit for microservices kubernetes go-kit_百度搜索 Peter Bourgon谈使用Go和& ...
- kratos微服务框架学习笔记一(kratos-demo)
目录 kratos微服务框架学习笔记一(kratos-demo) kratos本体 demo kratos微服务框架学习笔记一(kratos-demo) 今年大部分时间飘过去了,没怎么更博和githu ...
- golang微服务框架go-micro 入门笔记2.3 micro工具之消息接收和发布
本章节阐述micro消息订阅和发布相关内容 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架go-mi ...
- golang微服务框架go-micro 入门笔记2.4 go-micro service解读
本章节阐述go-micro 服务发现原理 go-micro架构 下图来自go-micro官方 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go- ...
- golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web
micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go- ...
- 微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍
微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍 上一篇关于网关的文章: 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Ngi ...
- 微服务(入门三):netcore ocelot api网关结合consul服务发现
简介 api网关是提供给外部调用的统一入口,类似于dns,所有的请求统一先到api网关,由api网关进行指定内网链接. ocelot是基于netcore开发的开源API网关项目,功能强大,使用方便,它 ...
随机推荐
- Python3.x和Python2.x的区别
1.性能 Py3.0运行 pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可 以取得很好的优化结果. Py3.1性能比Py2 ...
- OC编程的一些UI细节
1/如果你想用一个半透明的View遮住当前窗口,连并NavigationBar也一并遮住的话,那么你需要 将视图添加到navigationController的View上 [self.navigati ...
- Linux下随机密码生成器
参考资料: 1:http://justwinit.cn/post/5164/ 2:http://www.linuxidc.com/Linux/2012-11/73687.htm
- HttpClientUtils
import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.List; import ...
- python绘图中使用公式时,解决\frac{}{}出来的字体太小的问题
在用matplotlib绘图需要在图片中加入公式时,一般要用 text 或 annotate函数,并结合latex语法 '$...$'. 对于分数,如果直接使用\frac{}{},会造成分子分母上的字 ...
- Gson运用
输出对象或者对象的list时,我们一般都是重写toString,和遍历list,但是使用Gson输出对象或者对象的list会非常方便. Gson输出list或者对象.Gson数据没有格式化. impo ...
- 微服务实战系列--Nginx官网发布(转)
这是Nginx官网写的一个系列,共七篇文章,如下 Introduction to Microservices (this article) Building Microservices: Using ...
- Hello mybatis
idea玩mybatis,终于搞出个hello mybatis.记录下过程,备忘. 1.person表 CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INC ...
- dubbo-admin重新编译后部署出现 valid LOC header (bad signature)异常
前段时间从网上下载dubbo-admin发现在jdk1.7下不可用,后来根据网上说的升级了jar包版本还是有问题,于是观察了编译发现编译时出现类似如下异常: --------------------- ...
- Res_Orders_01
一.燃尽图展示 二.项目进展 1.讨论选题内容 2.确定项目的版本(Web版) 3.讨论能达到的效果和内容 4.确定编程方面的难点 5.开始制作大概的框架 三.遇到问题 1.不知道怎么部署能达到最好的 ...