既然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的更多相关文章

  1. [goa]golang微服务框架学习--安装使用

      当项目逐渐变大之后,服务增多,开发人员增加,单纯的使用go来写服务会遇到风格不统一,开发效率上的问题. 之前研究go的微服务架构go-kit最让人头疼的就是定义服务之后,还要写很多重复的框架代码, ...

  2. [goa]golang微服务框架学习(二)-- 代码自动生成

    之前用过go语言的反射来做一些代码生成,参考这篇. 但是这种方式,入侵太强,需要执行对应的申明调用, 所以对GOA框架的自动生成非常感兴趣,于是仔细研究了一下,发现用的比较巧妙, 这里先卖个关子,先看 ...

  3. 【GoLang】golang 微服务框架 go-kit

    golang-Microservice Go kit - A toolkit for microservices kubernetes go-kit_百度搜索 Peter Bourgon谈使用Go和& ...

  4. kratos微服务框架学习笔记一(kratos-demo)

    目录 kratos微服务框架学习笔记一(kratos-demo) kratos本体 demo kratos微服务框架学习笔记一(kratos-demo) 今年大部分时间飘过去了,没怎么更博和githu ...

  5. golang微服务框架go-micro 入门笔记2.3 micro工具之消息接收和发布

    本章节阐述micro消息订阅和发布相关内容 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架go-mi ...

  6. golang微服务框架go-micro 入门笔记2.4 go-micro service解读

    本章节阐述go-micro 服务发现原理 go-micro架构 下图来自go-micro官方 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go- ...

  7. golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

    micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go- ...

  8. 微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍

    微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍 上一篇关于网关的文章: 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Ngi ...

  9. 微服务(入门三):netcore ocelot api网关结合consul服务发现

    简介 api网关是提供给外部调用的统一入口,类似于dns,所有的请求统一先到api网关,由api网关进行指定内网链接. ocelot是基于netcore开发的开源API网关项目,功能强大,使用方便,它 ...

随机推荐

  1. css3动画2(transform用法)

    1.直接写在样式里,比如一个小箭头,transform:rotate(135deg)即可 2.写动画过程,@keyframes和transform和animation组合起来用 写在@keyframe ...

  2. 原生态ajax 传递json参数到服务器端

    案例说明:通过ajax将用户名和密码以json形式传递给服务器端,然后服务器端接受数据,进行处理返回json数据到前端 首先,在客户端,通过JavaScript脚本将页面表单数据封装成JSON格式.L ...

  3. MFC自绘控件不错的网站收集,不定时更新。

    找资料的时候,遇到好的网站收集起来,当时看看就忘记网址,下次再找又找不到,写下来才记得牢.欢迎大家留言,共同收集. 国外的: 1.codeproject https://www.codeproject ...

  4. Java三大框架的配置

    1. 首先是spring,右键项目-myeclipse-capabilitise-install spring etc.类似的就好,生成applicationContext.xml和spring一些类 ...

  5. Linux终端下安装jdk

    linux 终端下安装jdk(rpm方法) 1.下载jdk对应版本rpm文件(以下称为jdk.rpm) 放在对应文件夹下 2.使用命令给定权限 #chmod +x jdk.rpm 3.解压rpm文件 ...

  6. 从append追加的<tr>里传ID参数给js函数

    今天这个小问题几乎把我整崩溃 $.each(data.list, function (index, item) { i++; shenhe = "待审核"; tixing = it ...

  7. java位运算符介绍

    位操作是程序设计中对位模式按位或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加法 ...

  8. Can’t Activate Reporting Services Service in SharePoint

    访问sharepoint的reporing service 的报表的时候莫名其妙的报错: The requested service, 'http://amatltapp02:32843/1dacf4 ...

  9. 旋转机械中Pitch Change的经验

    针对CFX (Compound File EXplorer)中rotor-stator interface 网格的处理,Pitch Change方法提供了四种交接算法(intersection alg ...

  10. RequireJS基础(三)

    这篇来写一个具有依赖的事件模块event. event提供三个方法bind.unbind.trigger来管理DOM元素事件. event依赖于cache模块,cache模块类似于jQuery的$.d ...