SwagGen 是一个库和命令行工具,用于解析和生成 OpenAPI/Swagger 3.0 规范的代码,完全用 Swift 编写。
已移除 Swagger 2 支持。对于 Swagger 2,请使用
3.0.2版本或swagger_2分支
它包含一个 Swagger 库,可以在 Swift 中用于加载和解析 Swagger 规范。
SwagGen 是一个命令行工具,可以从 OpenAPI/Swagger 3.0 规范生成代码。可以编写任何语言的模板来利用此生成器。
SwagGen 包含一个捆绑的模板,用于生成客户端 Swift 库,以与 Swagger 规范交互。它包括对模型继承、共享枚举、离散和可变请求对象、内联模式、Codable 和 Equatable 模型、可配置选项、通用网络堆栈以及许多其他优点的支持。
请先确保已安装 Xcode 11+。
$ mint install yonaskolb/SwagGen
$ brew tap yonaskolb/SwagGen https://github.com/yonaskolb/SwagGen.git
$ brew install SwagGen
$ git clone https://github.com/yonaskolb/SwagGen.git
$ cd SwagGen
$ make install
$ git clone https://github.com/yonaskolb/SwagGen.git
$ cd swaggen
$ swift run
将以下内容添加到您的 Package.swift 文件的 dependencies 中
.package(url: "https://github.com/yonaskolb/SwagGen.git", from: "4.4.0"),
然后根据需要在任何地方导入
import SwagGenKit
import Swagger
使用 --help 查看用法信息
swaggen --help
Usage: swaggen <command> [options]
Commands:
generate Generates a template from a Swagger spec
help Prints this help information
version Prints the current version of this app
swaggen generate path_to_spec
使用 swaggen generate --help 查看生成选项列表。
spec:这是 Swagger 规范的路径,是必需参数。它可以是文件路径或 YAML 或 JSON 文件的网址
--language:要为其生成模板的语言。目前默认为 swift。
--template::这是模板配置 yaml 文件的路径。它可以是文件的直接路径,也可以是父目录的路径,默认情况下将在其中查找 /template.yml。如果未传递此参数,将使用该语言的默认模板。
--destination:生成的文件将添加到的目录。
--option:一个选项,将与模板配置选项合并,此参数中的选项优先,这意味着将覆盖任何同名的现有选项。可以重复此参数以传入多个选项。选项必须指定选项名称和选项值,以冒号分隔,任何空格都包含在引号中。可以通过使用点语法来设置字典中的嵌套选项。允许以下格式
-- option myOption:myValue-- option modelSuffix: Model-- option propertyNames.identifier: id-- option "myOption: my value"--clean:控制是否以及如何清理目标目录中未生成的文件。选项包括
none:不删除任何文件(默认)all:删除所有其他文件leave.files:删除目标目录中除以 . 开头的文件和目录之外的所有文件和目录。这对于保留配置文件和目录(例如 .git)很有用,同时仍然确保从规范中删除的项目也从生成的 API 中删除。--verbose:显示更详细的输出
--silent:静音所有标准输出。错误仍将显示
示例
swaggen generate http://myapi.com/spec --template Templates/Swift --destination generated --option name:MyAPI --option "customProperty: custom value --clean leave.files"
对于 Swift 模板,一个方便的选项是 name,它可以更改生成的框架的名称,使其不再是默认的 API。这可以在模板中设置,也可以通过传入 --option name:MyCoolAPI 来设置。
所有可用选项列表
| name | action | expected values | default value |
|---|---|---|---|
| name | API 的名称 | String |
API |
| authors | podspec 中的作者 | String |
Yonas Kolb |
| baseURL | APIClient 中的 baseURL | String |
规范的第一个 scheme、host 和 base path |
| fixedWidthIntegers | 是否使用 Int32 和 Int64 等类型 | Bool |
false |
| homepage | podspec 中的 homepage | String |
https://github.com/yonaskolb/SwagGen |
| modelPrefix | 通过添加前缀和模型文件名来模型化 | String |
null |
| modelSuffix | 通过添加后缀和模型文件名来模型化 | String |
null |
| mutableModels | 模型属性是否可变 | Bool |
true |
| modelType | 每个模型是 struct 还是 class |
String |
class |
| modelInheritance | 模型是否使用继承。对于结构体必须为 false | Bool | true |
| modelNames | 覆盖模型名称 | [String: String] |
[:] |
| modelProtocol | 自定义所有模型都遵循的协议名称 | String |
APIModel |
| enumNames | 覆盖枚举名称 | [String: String] |
[:] |
| enumUndecodableCase | 是否向枚举添加不可解码的情况 | Bool |
false |
| propertyNames | 覆盖属性名称 | [String: String] |
[:] |
| safeArrayDecoding | 过滤掉数组中的无效项而不是抛出错误 | Bool |
false |
| safeOptionalDecoding | 将无效的可选项设置为 nil 而不是抛出错误 | Bool |
false |
| tagPrefix | 所有标签的前缀 | String |
null |
| tagSuffix | 所有标签的后缀 | String |
null |
| codableResponses | 约束所有响应都为 Codable |
Bool |
false |
| anyType | 使用自定义类型覆盖 Any |
String |
Any |
| numberType | 在未指定格式时覆盖默认数字类型 | String |
Double |
如果编写自己的 Swift 模板,则需要为生成的几种类型提供类型别名
ID:UUID 格式。通常为 UUID 或 StringFile:file 格式。通常为 URL、Data 或具有 mimeType 和 fileName 的自定义类型DateTime:date-time 格式。通常为 DateDateDay:date 格式。通常为 Date 或自定义类型。如果要在 Xcode 中运行时传递任何必需的参数,可以编辑 scheme 以包含启动参数。
模板由模板配置文件、一堆 Stencil 文件以及在生成过程中复制的其他文件组成
这是 YAML 或 JSON 格式的模板的配置和清单文件。它可以包含
Swiftdefinitions 中的每个模型的文件的都获取其自己的定义上下文)。请注意,模板 options 字段中的属性可以在此处使用definitions,则路径可以是 Models/{{ type }}.swift,文件名将是定义的类型。如果省略此项,则目标将与路径相同,相对于最终目标目录。如果它解析为空字符串,则将跳过它并且不生成。options 参数合并,其中参数选项优先。这些选项可以在模板文件路径及其内容中引用。可以在此处找到 Swift 的示例模板
这些文件遵循 https://stencil.fuller.li 中概述的 Stencil 文件格式
格式化程序更改模板可用的信息以及信息的格式化方式。可以通过模板配置中的 formatter 属性指定它们。通常,这些将映射到特定的目标语言,但可以为不同的目的进行自定义。
SwagGen 可用于生成任何语言的代码。目前,只有 Swift 的格式化程序和模板
用法文档可以在随模板生成的 Readme 中找到。
此工具由以下项目驱动:
还要感谢 Logan Shire 及其在 Swagger Parser 上的初步工作
欢迎提交 pull request 和 issue
SwagGen 在 MIT 许可证下获得许可。有关更多信息,请参阅 LICENSE。