echoswagger/README_zh-CN.md

7.1 KiB
Raw Blame History

English | 简体中文

Echoswagger

Echo 框架的 Swagger UI 生成器

Go Report Card Build Status codecov

特性

  • 不依赖任何SwaggerUI的HTML/CSS文件
  • 与Echo高度整合低侵入式设计
  • 利用强类型语言和链式编程的优势,简单易用
  • 及时的垃圾回收,低内存占用

安装

go get github.com/pangpanglabs/echoswagger

示例

package main

import (
	"net/http"

	"github.com/pangpanglabs/echoswagger"
	"github.com/labstack/echo"
)

func main() {
	// ApiRoot with Echo instance
	r := echoswagger.New(echo.New(), "", "doc/", nil)

	// Routes with parameters & responses
	r.POST("/", createUser).
		AddParamBody(User{}, "body", "User input struct", true).
		AddResponse(http.StatusCreated, "successful", nil, nil)

	// Start server
	r.Echo().Logger.Fatal(r.Echo().Start(":1323"))
}

type User struct {
	Name string
}

// Handler
func createUser(c echo.Context) error {
	return c.JSON(http.StatusCreated, nil)
}

用法

New()创建ApiRoot,此方法是对echo.New()方法的封装

r := echoswagger.New(echo.New(), "/v1", "doc/", nil)

注意:参数basePath一般用于程序部署后访问路径并非网站根目录时的情况比如程序运行在本地的某个API的URL为http://localhost:1323/users部署至服务器后的实际URL为https://www.xxx.com/legacy-api/users,则本地运行时,basePath应该传入/, 部署至服务器时,basePath应该传入/legacy-api

你可以用这个ApiRoot来:

  • 设置Security定义, 请求/响应Content-TypeUI选项Scheme等。
r.AddSecurityAPIKey("JWT", "JWT Token", echoswagger.SecurityInHeader).
	SetRequestContentType("application/x-www-form-urlencoded", "multipart/form-data").
	SetUI(UISetting{HideTop: true}).
	SetScheme("https", "http")
  • 获取echo.Echo实例。
r.Echo()
  • 在默认组中注册一个GET、POST、PUT、DELETE、OPTIONS、HEAD或PATCH路由这些是对Echo的注册路由方法的封装。 此方法返回一个Api实例。
r.GET("/:id", handler)
  • 以及: ↓

Group()创建ApiGroup,此方法是对echo.Group()方法的封装

g := r.Group("Users", "/users")

你可以用这个ApiGroup来:

  • 设置描述,等。
g.SetDescription("The desc of group")
  • 为此组中的所有路由设置Security。
g.SetSecurity("JWT")
  • 获取echo.Group实例。
g.EchoGroup()
  • 以及: ↓

ApiGroup中注册一个新的路由

Echoswagger支持GET、POST、PUT、DELETE、OPTIONS、HEAD或PATCH方法这些是对Echo的注册路由方法的封装。

a := g.GET("/:id", handler)

你可以使用此Api实例来:

  • 使用以下方法添加参数:
AddParamPath(p interface{}, name, desc string)

AddParamPathNested(p interface{})

AddParamQuery(p interface{}, name, desc string, required bool)

AddParamQueryNested(p interface{})

AddParamForm(p interface{}, name, desc string, required bool)

AddParamFormNested(p interface{})

AddParamHeader(p interface{}, name, desc string, required bool)

AddParamHeaderNested(p interface{})

AddParamBody(p interface{}, name, desc string, required bool)

AddParamFile(name, desc string, required bool)

后缀带有Nested的方法把参数p的字段看做多个参数,所以它必须是结构体类型的。

例:

type SearchInput struct {
	Q         string `query:"q" swagger:"desc("Keywords"),required"`
	SkipCount int    `query:"skipCount"`
}
a.AddParamQueryNested(SearchInput{})

等价于:

a.AddParamQuery("", "q", "", true).
	AddParamQuery(0, "skipCount", "", false)
  • 添加响应。
a.AddResponse(http.StatusOK, "response desc", body{}, nil)
  • 设置Security请求/响应的Content-Type概要描述等。
a.SetSecurity("JWT").
	SetResponseContentType("application/xml").
	SetSummary("The summary of API").
	SetDescription("The desc of API")
  • 获取echo.Route实例。
a.Route()

使用swagger标签你可以在AddParam...方法中设置更多信息

例:

type User struct {
	Age    int       `swagger:"min(0),max(99)"`
	Gender string    `swagger:"enum(male|female|other),required"`
	Money  []float64 `swagger:"default(0),readOnly"`
}
a.AddParamBody(&User{}, "Body", "", true)

此定义等价于:

{
    "definitions": {
        "User": {
            "type": "object",
            "properties": {
                "Age": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0,
                    "maximum": 99
                },
                "Gender": {
                    "type": "string",
                    "enum": [
                        "male",
                        "female",
                        "other"
                    ],
                    "format": "string"
                },
                "Money": {
                    "type": "array",
                    "items": {
                        "type": "number",
                        "default": 0,
                        "format": "double"
                    },
                    "readOnly": true
                }
            },
            "required": [
                "Gender"
            ]
        }
    }
}

支持的swagger标签:

Tag Type Description
collect string 如果类型是数组,确定其格式。可能的值有:
  • csv - 逗号分隔的值 foo,bar
  • ssv - 空格分隔的值 foo bar
  • tsv - tab分隔的值 foo\tbar
  • pipes - pipe分隔的值 foo|bar
默认值是 csv
desc string 描述。
maximum number -
minimum number -
maxLength integer -
minLength integer -
allowEmpty boolean 设置传递空值参数的功能。 这仅对queryformData参数有效并允许你发送仅具有名称或空值的参数。默认值为“false”。
required boolean 确定此参数是否必需。如果参数是in“path”则此属性默认为“true”。否则可以设置此属性其默认值为“false”。
readOnly boolean 仅与Schema"properties"定义相关。将属性声明为“只读”。这意味着它可以作为响应的一部分发送但绝不能作为请求的一部分发送。标记为“readOnly”的属性为“true”不应位于已定义模式的“required”列表中。默认值为“false”。
enum [*] 枚举值,多个值应以“|”分隔。
default * 默认值,该类型与字段的类型相同。

参考

OpenAPI Specification 2.0

License

MIT