跳到主要内容

openapi

openapi 库用于处理 OpenAPI/Swagger 文档:在 JSON/YAML 间转换、从站点提取 OpenAPI 描述、并据此生成可发送的 HTTP 请求流,常用于 API 测试用例的自动生成与接口资产梳理。

典型使用场景:

  • 格式转换:openapi.ConvertJsonToYaml / openapi.ConvertYamlToJson 互转文档格式。
  • 提取与生成:openapi.ExtractOpenAPI3Scheme(domain) 从目标提取 OpenAPI 3 描述,openapi.GenerateHTTPFlows(doc, opts...) 据文档生成 HTTP 请求(配 openapi.domain / openapi.https / openapi.flowHandler 处理每条请求)。

与相邻库的关系:openapi 生成的请求常交给 fuzz/poc 做接口测试,是"从 API 文档到测试请求"的桥梁。

共 7 个函数

函数索引

函数参数返回值说明
openapi.ConvertJsonToYamlj []byte[]byte, errorJSONToYAML 将 JSON 字节转换为 YAML 字节(导出名为 openapi.ConvertJsonToYaml)
openapi.ConvertYamlToJsony []byte[]byte, errorYAMLToJSON 将 YAML 字节转换为 JSON 字节(导出名为 openapi.ConvertYamlToJson)
openapi.ExtractOpenAPI3Schemedomain string*openapi3.T, error从数据库中已记录的 HTTP 流量提取指定域名的 OpenAPI3 文档

可变参数函数索引

函数参数返回值说明
openapi.GenerateHTTPFlowsdoc string, opt ...Optionerror根据 OpenAPI 2.0/3.0 文档生成对应的 HTTP 请求流

函数详情

ConvertJsonToYaml

ConvertJsonToYaml(j []byte) ([]byte, error)

JSONToYAML 将 JSON 字节转换为 YAML 字节(导出名为 openapi.ConvertJsonToYaml)

转换过程会尽量保留数字类型(int/float),而非统一转为 float

参数

参数名类型说明
j[]byteJSON 内容(字符串或字节)

返回值

序号类型说明
r1[]byte转换后的 YAML 内容
r2error错误信息

示例

y = openapi.ConvertJsonToYaml(`{"name":"yak","version":1}`)~
assert str.Contains(string(y), "name: yak"), "json should be converted to yaml"

ConvertYamlToJson

ConvertYamlToJson(y []byte) ([]byte, error)

YAMLToJSON 将 YAML 字节转换为 JSON 字节(导出名为 openapi.ConvertYamlToJson)

由于 JSON 是 YAML 的子集,对 JSON 输入做转换基本是无操作

参数

参数名类型说明
y[]byteYAML 内容(字符串或字节)

返回值

序号类型说明
r1[]byte转换后的 JSON 内容
r2error错误信息

示例

j = openapi.ConvertYamlToJson("name: yak\nversion: 1\n")~
assert str.Contains(string(j), "\"name\":\"yak\""), "yaml should be converted to json"

ExtractOpenAPI3Scheme

ExtractOpenAPI3Scheme(domain string) (*openapi3.T, error)

从数据库中已记录的 HTTP 流量提取指定域名的 OpenAPI3 文档

依赖本地项目数据库中已抓取的流量数据

参数

参数名类型说明
domainstring目标域名

返回值

序号类型说明
r1*openapi3.T提取出的 OpenAPI3 文档对象
r2error错误信息

示例

// 示意性示例,需要本地项目数据库中已有该域名的流量
scheme = openapi.ExtractOpenAPI3Scheme("example.com")~
schemeJSON = scheme.MarshalJSON()~
println(string(schemeJSON))

可变参数函数详情

GenerateHTTPFlows

GenerateHTTPFlows(doc string, opt ...Option) error

根据 OpenAPI 2.0/3.0 文档生成对应的 HTTP 请求流

自动尝试按 OpenAPI 2 与 OpenAPI 3 解析,通过 openapi.flowHandler 接收每个生成的流

必填参数

参数名类型说明
docstringOpenAPI 文档内容(JSON 或 YAML)

可选参数

可作为可变参数 opt ...Option 传入选项;共 3 个可用选项,详见 Option 选项列表

返回值

序号类型说明
r1error错误信息

示例

// 示意性示例,需提供真实 OpenAPI 文档
doc = file.ReadFile("openapi.yaml")~

err = openapi.GenerateHTTPFlows(string(doc), openapi.flowHandler(func(flow) {
println(flow.Url)
}))

if err != nil { die(err) }

可变参数选项列表

以下按选项类型汇总全部可变参数选项(原先重复在各主函数下的选项表已收拢到此处):

1. 类型:Option

涉及到的函数有:openapi.GenerateHTTPFlows

选项函数参数返回值说明
openapi.domaindomain stringOptionWithDomain 设置生成请求流时使用的目标域名
openapi.flowHandlerhandler func(flow *schema.HTTPFlow)OptionWithFlowHandler 设置接收生成 HTTP 流的回调
openapi.httpsb boolOptionWithHttps 设置生成的请求流是否使用 https