Swift 5.8+

MIT license Tests

OpenAPI 支持

请参阅父库:https://github.com/mattpolzin/OpenAPIKit

要生成 OpenAPI 3.1.x 类型,请使用 OpenAPIReflection 模块。要生成 OpenAPI 3.0.x 类型,请使用 OpenAPIReflection30 模块。

OpenAPIReflection

此库为从 Swift 类型创建 OpenAPI 类型提供扩展支持。具体来说,此库涵盖了 Swift 类型的一个子集,这些类型需要 JSONEncoder 来对类型的 JSONSchema 进行有根据的猜测,或将任意类型转换为 AnyCodable,以便用作模式示例或允许的值。

日期

日期将根据传递到模式构造方法中的 JSONEncoder 的编码设置创建不同的 OpenAPI 表示形式。

// encoder1 has `.iso8601` `dateEncodingStrategy`
let schema = Date().dateOpenAPISchemaGuess(using: encoder1)
// ^ equivalent to:
let sameSchema = JSONSchema.string(
  format: .dateTime
)

// encoder2 has `.secondsSince1970` `dateEncodingStrategy`
let schema2 = Date().dateOpenAPISchemaGuess(using: encoder2)
// ^ equivalent to:
let sameSchema = JSONSchema.number(
  format: .double
)

即使给定自定义格式化程序日期解码策略,它也会尝试进行猜测。

枚举

只要 Swift 枚举符合 CaseIterableEncodableAnyJSONCaseIterable(最后一个是前两者的自然结果),它们就会生成指定了允许值的模式。

enum CodableEnum: String, CaseIterable, AnyJSONCaseIterable, Codable {
  case one
  case two
}

let schema = CodableEnum.caseIterableOpenAPISchemaGuess(using: JSONEncoder())
// ^ equivalent, although not equatable, to:
let sameSchema = JSONSchema.string(
  allowedValues: "one", "two"
)

结构体

只要 Swift 结构体符合 SampleableEncodable,它们就会生成最佳猜测模式。

struct Nested: Encodable, Sampleable {
  let string: String
  let array: [Int]

  // `Sampleable` just enables mirroring, although you could use it to produce
  // OpenAPI examples as well.
  static let sample: Self = .init(
    string: "",
    array: []
  )
}

let schema = Nested.genericOpenAPISchemaGuess(using: JSONEncoder())
// ^ equivalent and indeed equatable to:
let sameSchema = JSONSchema.object(
  properties: [
    "string": .string,
    "array": .array(items: .integer)
  ]
)

自定义 OpenAPI 类型表示形式

您可以利用此库和 OpenAPIKit 提供的协议,从您自己的 Swift 类型创建任意复杂的 OpenAPI 类型。目前,关于此主题的唯一文档形式是在 JSONAPI+OpenAPI 库中完全实现的示例。只需查找对 OpenAPISchemaTypeOpenAPIEncodedSchemaType 的遵循。