既然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资源的导出

  1. package design
  2.  
  3. import (
  4. . "github.com/goadesign/goa/design"
  5. . "github.com/goadesign/goa/design/apidsl"
  6. )
  7.  
  8. //这里的host会生成swagger host
  9. var _ = API("adder", func() {
  10. Title("The adder API")
  11. Description("A teaser for goa")
  12. Host("localhost:8080")
  13. Scheme("http")
  14. })
  15.  
  16. var _ = Resource("operands", func() {
  17. Action("add", func() {
  18. Routing(GET("add/:left/:right"))
  19. Description("add returns the sum of the left and right parameters in the response body")
  20. Params(func() {
  21. Param("left", Integer, "Left operand")
  22. Param("right", Integer, "Right operand")
  23. })
  24. Response(OK, "text/plain")
  25. })
  26. Action("des", func() {
  27. Routing(GET("des/:left/:right"))
  28. Description("des returns the sum of the left and right parameters in the response body")
  29. Params(func() {
  30. Param("left", Integer, "Left operand")
  31. Param("right", Integer, "Right operand")
  32. })
  33. Response(OK, "text/plain")
  34. })
  35. })

  36. //这里,添加josn和swagger-ui的资源导出
  37. var _ = Resource("swagger", func() {
  38. Origin("*", func() {
  39. Methods("GET") // Allow all origins to retrieve the Swagger JSON (CORS)
  40. })
  41. Files("/swagger.json", "swagger/swagger.json")
  42. })
  43.  
  44. var _ = Resource("swagger-ui", func() {
  45.  
  46.   //建立静态httpserver
  47. Files("/swagger-ui/*filepath", "swagger-ui/")
  48. })

然后重新生成代码:

  1. ~/gocode/src/playgoa/demo$ goagen bootstrap -d playgoa/demo/design

这个时候,会有两个新的文件:

swagger.go

swagger-ui.go

3.main.go里面mount这两个资源,然后编译启动程序,访问即可

然后,需要修改main.go文件

  1. package main
  2.  
  3. import (
  4. "playgoa/demo/app"
  5.  
  6. "github.com/goadesign/goa"
  7. "github.com/goadesign/goa/middleware"
  8. )
  9.  
  10. func main() {
  11. // Create service
  12. service := goa.New("adder")
  13.  
  14. // Mount middleware
  15. service.Use(middleware.RequestID())
  16. service.Use(middleware.LogRequest(true))
  17. service.Use(middleware.ErrorHandler(service, true))
  18. service.Use(middleware.Recover())
  19.  
  20. // Mount "operands" controller
  21. c := NewOperandsController(service)
  22. app.MountOperandsController(service, c)
  23.  
  24. //add swagger
  25. s := NewSwaggerController(service)
  26. app.MountSwaggerController(service, s)
  27.  
  28. //add swagger-ui
  29. sui := NewSwaggerUIController(service)
  30. app.MountSwaggerUIController(service, sui)
  31.  
  32. // Start service
  33. if err := service.ListenAndServe(":8080"); err != nil {
  34. service.LogError("startup", "err", err)
  35. }
  36. }

然后编译程序:

  1. ~/gocode/src/playgoa/demo$ go build -o playgoa

这里别忘记了把swagger-ui中的dist目录下的所有文件,copy到demo目录下的swagger-ui下哦

  1. qingping.zhang@bogon ~/gocode/src/playgoa/demo$ ll
  2. total
  3. drwxr-xr-x qingping.zhang staff : app
  4. drwxr-xr-x qingping.zhang staff : client
  5. drwxr-xr-x qingping.zhang staff : design
  6. -rw-r--r-- qingping.zhang staff : main.go
  7. -rw-r--r-- qingping.zhang staff : operands.go
  8. -rwxr-xr-x qingping.zhang staff : playgoa
  9. drwxr-xr-x qingping.zhang staff : swagger
  10. drwxr-xr-x qingping.zhang staff : swagger-ui
  11. -rw-r--r-- qingping.zhang staff : swagger-ui.go
  12. -rw-r--r-- qingping.zhang staff : swagger.go
  13.  
  14. #在这里。。。
  15. qingping.zhang@bogon ~/gocode/src/playgoa/demo$ ll swagger-ui
  16. total
  17. drwxr-xr-x qingping.zhang staff : css
  18. drwxr-xr-x qingping.zhang staff : fonts
  19. drwxr-xr-x qingping.zhang staff : images
  20. -rw-r--r-- qingping.zhang staff : index.html
  21. drwxr-xr-x qingping.zhang staff : lang
  22. drwxr-xr-x qingping.zhang staff : lib
  23. -rw-r--r-- qingping.zhang staff : o2c.html
  24. -rw-r--r-- qingping.zhang staff : swagger-ui.js
  25. -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. AX7: How to deploy a Package

    A. Using LCS services. B. Manual using command prompt. Here I’ll show using command prompt, as I fou ...

  2. Maven依赖版本冲突的分析及解决小结

    1:前言 做软件开发这几年遇到了许多的问题,也总结了一些问题的解决之道,之后慢慢的再遇到的都是一些重复性的问题了,当然,还有一些自己没有完全弄明白的问题.如果做的事情是重复的,遇到重复性问题的概率也就 ...

  3. python中logging

    1.root logger以及logger斧子关系    http://www.pythonclub.org/modules/logging #coding=utf-8 __author__ = 'n ...

  4. cpio命令用法

    [转自]流浪妖精のSKY    http://www.cnitblog.com/flutist1225/articles/18974.html cpio命令用法 cpio命令     利用cpio 可 ...

  5. git 查看远程分支、本地分支、删除本地分支【转】

    1 查看远程分支 $ git branch -a * br-2.1.2.2 master remotes/origin/HEAD -> origin/master remotes/origin/ ...

  6. 进击的docker 一 : Docker 简介

    Docker简介 1.什么是docker 1.1.docker 起源 开源项目 诞生2013年初 GO语言开发实现 遵从了Apache2.0协议 项目代码在GitHub维护 1.2.docker目标 ...

  7. 【原创】使用Fiddler抓取手机网络包

    一: 下载安装Fiddler 二: 打开 tools--Telerik Fiddler Options, 进行如下设置

  8. 阿里云slb和ucloud负载均衡ulb添加ssl证书将http服务https化的配置详解

    阿里云和ucloud服务器配置ssl证书将http服务https化的配置详解 项目背景: 苹果App于2017年1月1日将启用App Transport Security安全功能,即强制App通过HT ...

  9. MVC Cookie的使用

    1.创建Cookies有两种方法: Response.Cookies["userName"].Value = "patrick"; Response.Cooki ...

  10. Backbone入门讲解

    Backbone是一个实现了web前端mvc模式的js框架. 一种解决问题的通用方法,我们叫做模式. 设计模式:工厂模式,适配器模式,观察者模式等,推荐js设计模式这本书.设计模式是一种思想. 框架模 ...