SDK 代码生成工具 Snips 发布

Snips 是一个在命令行界面使用的 SDK 代码生成工具,借助 Snips,可以在短时间内开发出 QingCloud 或 QingStor 的 SDK。Snips 已在 GitHub 开源,更多详情可参见 https://github.com/yunify/snips

Snips 读取 API Specifications(API 描述,例如 QingStor 对象存储的 API Specification: https://github.com/yunify/qingstor-api-specs)文件和模版文件来生成 SDK 中 API 调用部分的代码,再加上与各语言相关的代码,便可组成一个完整的 SDK。

另外,为了保证 SDK 的可用性和功能一致性,我们还引入了测试场景描述项目 https://github.com/yunify/qingstor-sdk-test-scenarios

注: QingCloud 的 API 描述及测试场景描述项目将稍后开源在 GitHub 上。

使用 Snips 开发 SDK 的流程如下图:

Snips Workflow

 使用 Snips 增加一门新语言的 SDK

1. 编写语言相关的、不适合生成的代码

2. 编写 API 代码模版

3. 使用 Snips 生成代码

4. 测试

5. 发布

使用 Snips 更新现有 SDK

1. 更新 API Specifications

2. 使用 Snips 重新生成代码

3. 测试

4. 发布

使用 Snips 生成 SDK 演示

下面以 QingStor 的 Go SDK(qingstor-sdk-go)为例演示 Snips 的使用方法:

1. 安装

可以直接使用 go get 安装:

go get -u github.com/yunify/snips

也可以从 Snips 项目的 GitHub Releases 页面下载编译好的二进制文件,支持 macOS、Linux 和 Windows 平台。

2. 使用 git submodule 引入 QingStor API Specifications 和 QingStor SDK test scenarios

3. 编写语言相关的不适合生成的代码,编写模版文件。

4. 使用 Snips 生成代码,并格式化代码。

$ snips --service=qingstor \
        --service-api-version=latest \
        --spec="./specs" \
        --template="./template" \
        --output="./service"
Loaded templates from ./template
4 template(s) detected.
Loaded service QingStor (2016-01-06) from ./specs

Generating to: ./service/qingstor.go
Generating to: ./service/object.go
Generating to: ./service/bucket.go
Generating to: ./service/types.go

Everything looks fine.
$ gofmt -w .

5. 使用生成好的代码实现测试用例,并运行场景化测试

$ pushd ./test
$ go run *.go
...
38 scenarios (38 passed)
84 steps (84 passed)
1m2.408357076s
$ popd

6. 以后每次 API 发生变更,只需要更新 git submodule,然后重新生成代码,通过场景化测试即可。