swaggos

swagger 文档生成器
授权协议 MIT
开发语言 Google Go
所属分类 开发工具、 程序文档工具
软件类型 开源软件
地区 国产
投 递 者 连晟
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

swaggos 是一个golang版本的swagger文档生成器,提供了native code包装器,并且支持主流的web框架包裹器

安装

    go get -u github.com/clearcodecn/swaggos

示例

目前只支持gin的包裹器

package main

import (
	"github.com/clearcodecn/swaggos"
	"github.com/clearcodecn/swaggos/ginwrapper"
	"github.com/gin-gonic/gin"
	"github.com/go-openapi/spec"
)

type User struct {
	Username     string `json:"username" required:"true"`
	Password     string `json:"password" required:"true" description:"密码" example:"123456" maxLength:"20" minLength:"6" pattern:"[a-zA-Z0-9]{6,20}"`
	Sex          int    `json:"sex" required:"false" default:"1" example:"1" format:"int64"`
	HeadImageURL string `json:"headImageUrl"`

	History string `json:"-"` // ignore
}

func main() {
	g := ginwrapper.Default()
	doc := g.Doc()
	g.Gin().Use(func(ctx *gin.Context) {
		ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*")
	})
	doc.JWT("Authorization")
	doc.HostInfo("https://localhost:8080/", "/api/v1")
	group := g.Group("/api/v1")
	{
		group.GET("/users", listUsers).
			Query("order", swaggos.DescRequired("排序", false)).
			Query("q", swaggos.DescRequired("名称迷糊查询", false)).
			JSON([]User{})

		group.POST("/user/create", createUser).
			Body(new(User)).JSON(gin.H{"id": 1})

		group.DELETE("/user/*id", deleteUser).
			JSON(gin.H{"id": 1})

		group.PUT("/user/update", createUser).
			Body(new(User)).JSON(new(User))
	}
	g.ServeDoc()
	g.Gin().Run(":8888")
}

func listUsers(ctx *gin.Context)  {}
func createUser(ctx *gin.Context) {}
func deleteUser(ctx *gin.Context) {}

示例将会生成该图例: click here to see image 您可以查看 examples 目录查看更多示例.

您也可以不使用包裹器

func main() {
	doc := swaggos.Default()

	doc.HostInfo("localhost:8080", "/api").
		Response(200, newSuccessExample()).
		Response(400, newErrorExample())

	group := doc.Group("/users")
	group.Get("/list").JSON(CommonResponseWithData([]model.User{}))
	group.Post("/create").Body(new(model.User)).JSON(CommonResponseWithData(1))
	group.Put("/update").Body(new(model.User)).JSON(CommonResponseWithData(1))
	// path item
	group.Get("/{id}").JSON(new(model.User))
	group.Delete("/{id}").JSON(CommonResponseWithData(1))

	data, _ := doc.Build()
	fmt.Println(string(data))

	data, _ = doc.Yaml()
	fmt.Println(string(data))
}

使用

增加请求头

     doc.Header("name","description",true)
    => generate a required header with key name

增加jwt token

    doc.JWT("Authorization")
    => ui will create authorization in request headers.  

Oauth2 支持

    scopes:= []string{"openid"}
    doc.Oauth2("http://path/to/oauth/token/url",scopes,scopes)
    => ui will create a oauth2 password credentials client

增加 host 信息

    doc.HostInfo("yourhost.com","/your/api/prefix")

增加 响应 content-Type 类型

    doc.Produces("application/json")

增加 请求 content-Type 类型

    doc.Consumes("application/json")

生成json

    data,_ := doc.Build()
    fmt.Println(string(data))
    => this is the swagger schema in json format

    data,_ := doc.Yaml()
    fmt.Println(string(data))
    => yaml format

struct的规则

swaggos 会解析结构体的tag并将其赋值到 swagger 规则上面,下面是本项目支持的一些tag示例

    type User struct {
        // 字段名称  model > json
        // this example field name will be m1
        ModelName string `model:"m1" json:"m2"`
        // 字段名会是  username 
        Username string `json:"username"` 
        //  字段名会是 Password
        Password string 
        // 会被忽略
        Ignored `json:"-"`
        // 是否必须
        Required string `required:"true"`
        // 字段的描述
        Description string `description:"this is description"`
        // 字段的类型: string,integer,time,number,boolean,array...
        Type string `type:"time"`
        // 默认值 abc
        DefaultValue string `default:"abc"`
        // 最大值 100
        Max float64 `maximum:"100"`
        // 最小值 0
        Min float64 `min:"0"`
        // 最大长度 20
        MaxLength string `maxLength:"20"`
        // 最小长度 10
        MinLength string `minLength:"10"`
        // 正则表达式规则
        Pattern string `pattern:"\d{0,9}"`
        // 数组长度 小于3
        MaxItems []int `maxItems:"3"`
        // 数组长度大于3
        MinItem []int `minItems:"3"`
        // 枚举,用 , 分割
        EnumValue int `enum:"a,b,c,d"`
        // 忽略字段
        IgnoreField string `ignore:"true"`
        // 匿名字段规则:
        // 如果是一个基本类型,则直接添加, 
        // 如果是一个 数组,也将直接添加
        // 如果是一个结构体 但是带了json tag,将会作为一个字段
        // 如果是一个结构体 带没有json tag,将会将里面的子字段添加上该结构体上
        Anymouse
    }

path上的工具方法

    path := doc.Get("/")
    // 创建一个 query 字段,包含了 描述和是否必须
    path.Query("name",DescRequired("description",true)).
    // 创建一个 query 字段,包含了 描述和是否必须 和默认值
    Query("name2",DescRequiredDefault("desc",true,"default"))

other useful functions:

    // 创建一个 swagger 的tag
    path.Tag("user group")
    
    // 请求的简单描述
    path.Summary("create a new user")

    // 请求的详细描述
    path.Description("....")
       
    // 设置请求-响应头
    path.ContentType("application/json","text/html")
   
    // form 字段
    path.Form("key1",swaggos.Attribute{Required:true})

    // 文件
    path.FormFile("file",swaggos.Attribute{Required:true})
    
    // form 用接头体解析
    path.FormObject(new(User))

    // query 用结构体解析
    path.QueryObject(new(User))
    
    // body 用结构体解析
    path.Body(new(User))

    // 响应json
    path.JSON(new(User))

响应

    // 响应带上具体的内容,将会创建具体的json示例
    // 400 
    path.BadRequest(map[string]interface{
            "data": nil,
            "code": 400,
    })
    // 401
    path.UnAuthorization(v)
    // 403
    path.Forbidden(v)
    // 500 
    path.ServerError(v)

github: https://github.com/clearcodecn/swaggos

gitee:  https://gitee.com/wocaa/swaggos

 相关资料
  • Django的admindocs应用从模型、视图、模板标签以及模板过滤器中,为任何INSTALLED_APPS中的应用获取文档。并且让文档可以在Django admin中使用。 在某种程度上,你可以使用admindocs来快为你自己的代码生成文档。这个应用的功能十分有限,然而它主要用于文档模板、模板标签和过滤器。例如,需要参数的模型方法在文档中会有意地忽略,因为它们不能从模板中调用。这个应用仍旧有

  • https://github.com/estan/protoc-gen-doc 这是一个Google Protocol Buffers编译器(protoc)的文档生成插件。这个插件可以从.proto文件中的注释内容生成HTML, DocBook 或者 Markdown 文档。 安装 参考 protoc-gen-doc Installation章节的信息。 linux安装 对于ubuntu系统,参考

  • easyopen提供一个简单的api文档查看页面,类似于swagger,基于注解功能来生成文档页面。生成的文档页面可以查看参数、结果说明,也可以进行模拟请求。对于前后端分离的项目来说会很有帮助。文档界面如下图所示: 左边的树形菜单对应文档名称,点击树可前往查看对应的接口说明。点击请求按钮可以发起请求进行测试。可修改业务参数中的值进行测试。 下面来讲解文档注解的使用方法。 文档页面默认是关闭的,需要

  • CabalPHP 支持接口文档自动生成。 编写好相关配置和文档注释后浏览器访问 http://127.0.0.1:9501/__docs 即可查看相关文档,注意检查自己的监听端口和IP。 点击这里访问示例文档 接口文档地址只能在debug环境(cabal.debug配置为true)下访问。 配置 文档相关配置在 conf/cabal.php // ... 'document' =

  • 支持在项目中使用 Swagger 注解语法,运行命令,生成 Swagger 文件。 Swagger 是最流行的 API 开发工具,它遵循 OpenAPI Specification(OpenAPI 规范,也简称 OAS)。 Swagger 可以贯穿于整个 API 生态,如 API 的设计、编写 API 文档、测试和部署。 Swagger 是一种通用的,和编程语言无关的 API 描述规范。 imi-

  • 原有插件生成的 HTML 文件内容和格式并不理想,考虑自行调整。 因此 fork 了原有仓库,准备动手修改。 这样就有必要能自己从c的源代码开始编译打包。 参考原有的插件打包说明: https://github.com/skyao/protoc-gen-doc/blob/master/BUILDING.md 准备工作 按照要求,需要准备两个东西: Protocol Buffers library

  • 安装 protoc-gen-doc 简单遵循安装要求即可: https://github.com/estan/protoc-gen-doc 安装完成之后的protoc是2.5.0版本,无法处理proto3的文件。因此我们需要升级替换protoc为v3.0.0版本。 升级protoc 使用预编译版本 下载 请先在 protobuf 的 发布页面 中找到对应版本的 download ,然后下载对应版本

  • 我正试图从各种类中生成清晰的文档,所有的JAX-RS都有注释,一些用java编写,一些用clojure编写。 我构建了一个maven项目,它只是依赖于包含服务类的war文件: 我无法生成任何服务文档。 当运行mvn发音:docs-X时,我看到我的类“注意到了”: [调试]注意到类 WEB-INF.classes.com.ws.scholar.resources.ClientResource in