[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网关项目,功能强大,使用方便,它 ...
随机推荐
- JSTL函数标签库 fn标签
JSTL函数标签库 fn标签 在使用jstl的函数标签库之前需要在页面中引入: <%@ taglib prefix="fn" uri="http://java.su ...
- 古诗词api,诗词接口,诗词api,中国诗词
服务商:api.getlove.cn 分类:诗词 更新时间:2016-03 如果接口不满足您的要求,您可以联系qq:2265658022购买完整的数据库 免费apikey:56eab527a0facb ...
- java后台调用url无协议
url格式不正确,可能有"www.baidu.com" "这个不能有 // 下载pdf public void downpdf(String URL, String ...
- 关于iOS10的允许访问用户数据产生的问题
不知道这个问题是什么时候出现的,直到我重写项目已应对IPv6的审核. 先前没有加引导页面,打开app直接进入主控制器.当弹出允许访问用户数据窗口的时候,主页面的数据是不加载的. 当用户未允许访问数据之 ...
- css secrets----multiple borders
原始文档: https://www.zybuluo.com/freeethy/note/193574 box-shadow solution 只能实现solid border box-shadow表现 ...
- Ubuntu实现wifi热点
系统:Ubuntu14.04 方法一: 打开网络连接,新建wifi,设置SSID和密码,完成设置后保存,再连接到隐藏的wifi,选择刚建立好的连接即可 优点:简单方便 缺点:建立的是Ad-hoc模式信 ...
- 有关Asp.net 中数据请求的处理的新认知:利用httpHandlers
转自csdn:HttpHandler HttpHandler是HTTP请求的处理中心,真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到Http ...
- maven增加自定义jar包
1.博客来源: http://www.cnblogs.com/leiOOlei/p/3356834.html 导入平台SDK的方法 mvn install:install-file -DgroupId ...
- MySQL效能监控工具mysqlreport安装和中文说明
管理 mysql 最让人困扰的就是如何有效的掌握 MySQL 的健康状况,因为 MySQL 虽然有提供许多系统变量值供您参考,但这些零散的数据若要手动搜集与过滤将会是一件十分没有效率的事情(除非您写 ...
- 二分查找-python
约12年年底的时候,接触了python不到半年的样子,入门是直接实现GUI测试case的.今天面试地平线机器人,发现忘得差不多了- -. 当时的问题是这样的 写一个二分查找是实现,我好像不记得二分查找 ...