⚠️此项目已停止开发。请查看替代方案,包括 Apple 维护的项目

SwagGen

Platforms SPM Git Version license

SwagGen 是一个库和命令行工具,用于解析和生成 OpenAPI/Swagger 3.0 规范的代码,完全用 Swift 编写。

已移除 Swagger 2 支持。对于 Swagger 2,请使用 3.0.2 版本或 swagger_2 分支

Swagger 解析器

它包含一个 Swagger 库,可以在 Swift 中用于加载和解析 Swagger 规范。

Swagger 代码生成器

SwagGen 是一个命令行工具,可以从 OpenAPI/Swagger 3.0 规范生成代码。可以编写任何语言的模板来利用此生成器。

Swift 模板

SwagGen 包含一个捆绑的模板,用于生成客户端 Swift 库,以与 Swagger 规范交互。它包括对模型继承、共享枚举、离散和可变请求对象、内联模式、Codable 和 Equatable 模型、可配置选项、通用网络堆栈以及许多其他优点的支持。

安装

请先确保已安装 Xcode 11+。

Mint

$ mint install yonaskolb/SwagGen

Homebrew

$ brew tap yonaskolb/SwagGen https://github.com/yonaskolb/SwagGen.git
$ brew install SwagGen

Make

$ git clone https://github.com/yonaskolb/SwagGen.git
$ cd SwagGen
$ make install

Swift Package Manager

用作 CLI

$ 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

generate

swaggen generate path_to_spec

使用 swaggen generate --help 查看生成选项列表。

示例

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 来设置。

Swift 模板

所有可用选项列表

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 模板,则需要为生成的几种类型提供类型别名

开发

如果要在 Xcode 中运行时传递任何必需的参数,可以编辑 scheme 以包含启动参数。

模板

模板由模板配置文件、一堆 Stencil 文件以及在生成过程中复制的其他文件组成

模板配置

这是 YAML 或 JSON 格式的模板的配置和清单文件。它可以包含

可以在此处找到 Swift 的示例模板

模板文件

这些文件遵循 https://stencil.fuller.li 中概述的 Stencil 文件格式

格式化程序

格式化程序更改模板可用的信息以及信息的格式化方式。可以通过模板配置中的 formatter 属性指定它们。通常,这些将映射到特定的目标语言,但可以为不同的目的进行自定义。

输出语言

SwagGen 可用于生成任何语言的代码。目前,只有 Swift 的格式化程序和模板

Swift API 用法

用法文档可以在随模板生成的 Readme 中找到。


致谢

此工具由以下项目驱动:

还要感谢 Logan Shire 及其在 Swagger Parser 上的初步工作

替代方案

贡献

欢迎提交 pull request 和 issue

许可证

SwagGen 在 MIT 许可证下获得许可。有关更多信息,请参阅 LICENSE