增加openapi文档基础的信息定义 + parameter基础定义

This commit is contained in:
白茶清欢 2024-07-19 15:59:20 +08:00
parent 723d0e477c
commit 458d33cba5
3 changed files with 152 additions and 35 deletions

View File

@ -1,4 +1,4 @@
// Package define ...
// Package define openapi 文档数据结构定一
//
// Description : define ...
//
@ -6,3 +6,131 @@
//
// Date : 2024-04-23 22:16
package define
// OpenapiDoc openapi文档结构, 文档规范参见 : https://openapi.apifox.cn/
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:16 2024/7/19
type OpenapiDoc struct {
Openapi string `json:"openapi" required:"true"` // 必选. 这个字符串必须是开放 API 规范版本号提到的符合语义化版本号规范的版本号。openapi字段应该被工具或者客户端用来解释 OpenAPI 文档.
Info *Info `json:"info" required:"true"` // 必选。此字段提供 API 相关的元数据。相关工具可能需要这个字段。
Servers []any `json:"servers"` // 服务环境
Tags []TagItem `json:"tags"` // 全部标签列表
Paths map[string]map[string]*PathConfig `json:"paths"` // 接口路径 -> 接口请求方法 -> 具体配置
}
// PathConfig 接口的具体配置
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:22 2024/7/19
type PathConfig struct {
Title string `json:"title" required:"true"` // 必选. 应用的名称。
Summary string `json:"summary"` // 一个可选的简要总结字符串,用来描述此路径内包含的所有操作。
Deprecated bool `json:"deprecated"` // 是否已弃用
Description string `json:"description"` // 一个可选的详细说明字符串,用于描述此路径包含的所有操作。 CommonMark syntax 可以被用来呈现富文本格式.
Tags []string `json:"tags"` // 接口标签列表
Parameters []*PathConfigParameter `json:"parameters"` // 参数列表
RequestBody any `json:"request_body"` // 请求体配置
}
// PathConfigParameter 参数配置
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:29 2024/7/19
type PathConfigParameter struct {
Name string `json:"name"` // 参数名称
In string `json:"in"` // 必选. 参数的位置,可能的值有 "query", "header", "path" 或 "cookie"。
Description string `json:"description"` // 对此参数的简要描述这里可以包含使用示例。CommonMark syntax可以被用来呈现富文本格式.
Required bool `json:"required"` // 标明此参数是否是必选参数。如果 参数位置 的值是 path那么这个参数一定是 必选 的因此这里的值必须是true。其他的则视情况而定。此字段的默认值是false。
Deprecated bool `json:"deprecated"` // 标明一个参数是被弃用的而且应该尽快移除对它的使用。
Schema *PathConfigParameterSchema `json:"schema"` // 定义适用于此参数的类型结构。 Schema 对象 | Reference 对象
AllowEmptyValue bool `json:"allowEmptyValue"` // 设置是否允许传递空参数这只在参数值为query时有效默认值是false。如果同时指定了style属性且值为n/a无法被序列化,那么此字段 allowEmptyValue应该被忽略。
Style string `json:"style"` // 描述根据参数值类型的不同如何序列化参数。默认值为基于in字段的值query 对应 formpath 对应 simple; header 对应 simple; cookie 对应 form。
Explode bool `json:"explode"` // 当这个值为true时参数值类型为array或object的参数使用数组内的值或对象的键值对生成带分隔符的参数值。对于其他类型的参数这个字段没有任何影响。当 style 是 form时这里的默认值是 true对于其他 style 值类型默认值是false。
AllowReserved bool `json:"allowReserved"` // 决定此参数的值是否允许不使用%号编码使用定义于 RFC3986内的保留字符 :/?#[]@!$&'()*+,;=。 这个属性仅用于in的值是query时此字段的默认值是false。
}
// PathConfigParameterSchema ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:32 2024/7/19
type PathConfigParameterSchema struct {
Description string `json:"description"` // 参数描述
Format string `json:"format"` // 映射到go数据类型时哪一个类型
Type string `json:"type"` // swagger定义的数据类型
Properties map[string]any `json:"properties"` // 属性, TODO : 待完善
}
type RequestBody struct {
}
// Info 信息
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:10 2024/4/19
type Info struct {
Description string `json:"description"` // 对应用的简短描述。 CommonMark syntax 可以被用来表示富文本呈现。
Title string `json:"title" required:"true"` // 必选. 应用的名称。
TermsOfService string `json:"termsOfService"` // 指向服务条款的 URL 地址,必须是 URL 地址格式。
Contact Contact `json:"contact"` // 联系方式
License License `json:"license"` // 开源协议
Version string `json:"version" required:"true"` // 必选. API 文档的版本信息(注意:这个版本和开放 API 规范版本没有任何关系)。
}
// Contact 联系人信息
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:08 2024/4/19
type Contact struct {
Name string `json:"name"` // 人或组织的名称。
Url string `json:"url"` // 指向联系人信息的 URL 地址,必须是 URL 地址格式。
Email string `json:"email"` // 人或组织的 email 地址,必须是 email 地址格式
}
// License 开源协议
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:09 2024/4/19
type License struct {
Name string `json:"name"` // 开源协议名
Url string `json:"url"` // 开源协议地址
}
// ServerItem server 对象结构
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 14:18 2024/7/19
type ServerItem struct {
Url string `json:"url" required:"true"` // 必选. 指向目标主机的 URL 地址。这个 URL 地址支持服务器变量而且可能是相对路径,表示主机路径是相对于本文档所在的路径。当一个变量被命名为类似{brackets}时需要替换此变量。
Description string `json:"description"` // 一个可选的字符串,用来描述此 URL 地址。CommonMark syntax可以被用来呈现富文本格式.
Variables map[string]*ServerItemVariable `json:"variables"` // 当 url 中出现变量名的时候, 会从次变量中读取数据替换到url中. 变量名 -> 变量配置
}
// ServerItemVariable ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 14:22 2024/7/19
type ServerItemVariable struct {
Default string `json:"default"` // 变量默认值
Description string `json:"description"` // 变量描述
Enum []string `json:"enum"` // 变量枚举值
}
// TagItem 每一个标签数据结构
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:18 2024/7/19
type TagItem struct {
Name string `json:"name"` // 标签名称
Description string `json:"description"` // 标签描述
}

View File

@ -7,40 +7,6 @@
// Date : 2024-04-19 12:07
package define
// Contact 联系人信息
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:08 2024/4/19
type Contact struct {
Name string `json:"name"` // 姓名
Url string `json:"url"` // 主页地址
Email string `json:"email"` // 邮箱
}
// License 开源协议
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:09 2024/4/19
type License struct {
Name string `json:"name"` // 开源协议名
Url string `json:"url"` // 开源协议地址
}
// Info 信息
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:10 2024/4/19
type Info struct {
Description string `json:"description"` // 文档描述
Title string `json:"title"` // 文档标题
Contact Contact `json:"contact"` // 联系方式
License License `json:"license"` // 开源协议
Version string `json:"version"` // 文档版本
}
// SwaggerPathConfig ...
//
// Author : zhangdeman001@ke.com<张德满>

23
parser.go Normal file
View File

@ -0,0 +1,23 @@
// Package api_doc ...
//
// Description : api_doc ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2024-07-19 11:45
package api_doc
var (
Parser = &parser{}
)
type parser struct {
}
func (p *parser) Openapi3() {
}
func (p *parser) swagger2() {
}