[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网关项目,功能强大,使用方便,它 ...
随机推荐
- 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 ...
- Maven依赖版本冲突的分析及解决小结
1:前言 做软件开发这几年遇到了许多的问题,也总结了一些问题的解决之道,之后慢慢的再遇到的都是一些重复性的问题了,当然,还有一些自己没有完全弄明白的问题.如果做的事情是重复的,遇到重复性问题的概率也就 ...
- python中logging
1.root logger以及logger斧子关系 http://www.pythonclub.org/modules/logging #coding=utf-8 __author__ = 'n ...
- cpio命令用法
[转自]流浪妖精のSKY http://www.cnitblog.com/flutist1225/articles/18974.html cpio命令用法 cpio命令 利用cpio 可 ...
- git 查看远程分支、本地分支、删除本地分支【转】
1 查看远程分支 $ git branch -a * br-2.1.2.2 master remotes/origin/HEAD -> origin/master remotes/origin/ ...
- 进击的docker 一 : Docker 简介
Docker简介 1.什么是docker 1.1.docker 起源 开源项目 诞生2013年初 GO语言开发实现 遵从了Apache2.0协议 项目代码在GitHub维护 1.2.docker目标 ...
- 【原创】使用Fiddler抓取手机网络包
一: 下载安装Fiddler 二: 打开 tools--Telerik Fiddler Options, 进行如下设置
- 阿里云slb和ucloud负载均衡ulb添加ssl证书将http服务https化的配置详解
阿里云和ucloud服务器配置ssl证书将http服务https化的配置详解 项目背景: 苹果App于2017年1月1日将启用App Transport Security安全功能,即强制App通过HT ...
- MVC Cookie的使用
1.创建Cookies有两种方法: Response.Cookies["userName"].Value = "patrick"; Response.Cooki ...
- Backbone入门讲解
Backbone是一个实现了web前端mvc模式的js框架. 一种解决问题的通用方法,我们叫做模式. 设计模式:工厂模式,适配器模式,观察者模式等,推荐js设计模式这本书.设计模式是一种思想. 框架模 ...