设为首页 收藏本站
查看: 1926|回复: 0

[经验分享] golang学习笔记7 使用beego swagger 实现API自动化文档

[复制链接]

尚未签到

发表于 2018-9-20 12:56:03 | 显示全部楼层 |阅读模式
  golang学习笔记7 使用beego swagger 实现API自动化文档
  API 自动化文档 - beego: 简约 & 强大并存的 Go 应用框架
  https://beego.me/docs/advantage/docs.md
  使用beego开发api server 和前端拆分开发,使用swagger自动化生成API文档
  Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。
  项目地址是:http://swagger.io/
  使用 beego 开发自带集成了 swagger的东西。
  https://beego.me/docs/advantage/docs.md
  github 地址:
  https://github.com/beego/swagger
  到项目目录下执行命令:
  bee run -gendoc=true -downdoc=true
  会自动下载最新的 swagger 压缩文件
  启动成功,直接访问
  http://localhost:8080/swagger/
  会出来两个url,http://localhost:8080/swagger/swagger.json
  http://localhost:8080/swagger/swagger.yml


  • 第一开启应用内文档开关,在配置文件中设置:EnableDocs = true,
  • 然后在你的 main.go 函数中引入 _ "beeapi/docs"(beego 1.7.0 之后版本不需要添加该引用)。
  • 这样你就已经内置了 docs 在你的 API 应用中,然后你就使用 bee run -gendoc=true -downdoc=true,让我们的 API 应用跑起来,
  • -gendoc=true 表示每次自动化的 build 文档,-downdoc=true 就会自动的下载 swagger 文档查看器
  到 https://github.com/swagger-api/swagger-ui 下载zip包,
  解压后把dist文件夹复制到swagger目录下即可访问里面的index.html
  为了方便把文件夹改名成show,把index.html 的url改成本地的
  //url: "http://petstore.swagger.io/v2/swagger.json",
  url:"http://localhost:8080/swagger/swagger.json",
  在浏览器访问
  http://localhost:8080/swagger/show/index.html
  即可看到自己项目的api文档了,示例如下:
DSC0000.png

DSC0001.png

DSC0002.png

  注:如果直接在文件夹打开dist下的index会报跨域的错误
DSC0003.png

DSC0004.png

  注:bee pack时swagger 的他会自动解压文件到swagger目录下,不需要自己再放个目录了,可以把之前的show目录删掉了
DSC0005.png


添加auth token的方法,需要改造swagger的index.html
  网上很多方法都是行不通的,在下面这个才找到可行的方法
  Add JWT authorization header in Swagger v3 · Issue #2915 · swagger-api/swagger-ui · GitHub
  https://github.com/swagger-api/swagger-ui/issues/2915
  head 里面添加meta(这个swagger实际可以不要,其他测试可用):
  
  body里面的部分内容改成下面代码,主要是添加一个configs配置,直接设置在head里面是没用的,需要设置在SwaggerUIBundle对象里面才有用,最终execute过去的请求是curl:
  

  

  
window.onload = function() {
  
// Build a system
  
const ui = SwaggerUIBundle({
  
url: "swagger.json",
  
dom_id: '#swagger-ui',
  
configs: {
  
preFetch: function(req) {
  
if (authToken) {
  
req.headers["Authorization"] = authToken;
  
}
  
return req;
  
}
  
},
  
presets: [
  
SwaggerUIBundle.presets.apis,
  
SwaggerUIStandalonePreset
  
],
  
plugins: [
  
SwaggerUIBundle.plugins.DownloadUrl
  
],
  
layout: "StandaloneLayout"
  
})
  

  
window.ui = ui
  
}
  

  
var authToken = "";
  
function addApiKeyAuthorization(){
  
var key = encodeURIComponent(document.getElementById('input_apiKey').value);
  
authToken = "Bearer " + key;
  
//设置请求报文头
  
//var c1 = $("#head_auth").attr('content');
  
//console.log("c1 " + c1);
  
$("#head_auth").attr('content',authToken);
  
}
  

  

  

  

DSC0006.png

DSC0007.png

  没有设置的时候 验证不通过返回400错误信息
DSC0008.png

  跨域的问题,可以在入口main方法里面加个过滤器filter,允许所有请求都跨域
  beego/cors.go at master · astaxie/beego · GitHub
  https://github.com/astaxie/beego/blob/master/plugins/cors/cors.go#L23
  

// Package cors provides handlers to enable CORS support.  
// Usage
  
//import (
  
// "github.com/astaxie/beego"
  
//"github.com/astaxie/beego/plugins/cors"
  
// )
  
//
  
//func main() {
  
//// CORS for https://foo.* origins, allowing:
  
//// - PUT and PATCH methods
  
//// - Origin header
  
//// - Credentials share
  
//beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
  
//AllowOrigins:     []string{"https://*.foo.com"},
  
//AllowMethods:     []string{"PUT", "PATCH"},
  
//AllowHeaders:     []string{"Origin"},
  
//ExposeHeaders:    []string{"Content-Length"},
  
//AllowCredentials: true,
  
//}))
  
//beego.Run()
  
//}
  

  

  或者单个 API 增加 CORS 支持
  c.Ctx.Output.Header("Access-Control-Allow-Origin", "*")
  另外https的无法访问http的,这个是协议限制的
  要方便测试可以把所有都设置成通配符*
  

beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{  
AllowOrigins:     []string{"*"},
  
AllowMethods:     []string{"*"},
  
AllowHeaders:     []string{"*"},
  
ExposeHeaders:    []string{"*"},
  
AllowCredentials: true,
  
}))
  

  

  ---------------------------

QQ群:golang beego技术交流群(316397059)
DSC0009.png


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-598891-1-1.html 上篇帖子: haha1680737 下篇帖子: golang基于当前1.9版本进行源码编译升级到1.10
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表