A code generator for RESTful APIs.
A code generator for RESTful APIs.
Snips generates various code using API specifications in OpenAPI Specification (Swagger) v2.0 format.
Run snips --help
to get to help messages of snips.
$ snips --help
A code generator for RESTful APIs.
For example:
$ snips -f ./specs/qingstor/api.json
-t ./templates/qingstor/go \
-o ./publish/qingstor-sdk-go/service
$ ...
$ snips --file=./specs/qingstor/api.json \
--template=./templates/qingstor/ruby \
--output=./publish/qingstor-sdk-ruby/lib/qingstor/sdk/service
$ ...
Copyright (C) 2016 Yunify, Inc.
Usage:
snips [flags]
Flags:
-f, --file string Specify the spec file.
--format string Specify the format of spec file. (default "OpenAPI-v2.0")
-o, --output string Specify the output directory.
-t, --template string Specify template files directory.
-v, --version Show version.
Snips is a command line tool, and it's easy to have it installed. You can build it from source code or download the precompiled binary directly.
Snips requires Go 1.6 or later's vendor feature, the dependencies the project
used are included in the vendor
directory. And we use glide
to manage project dependence.
$ git clone [email protected]:yunify/snips.git
$ glide install
$ make install
Notice: You can also use Go 1.5 with the GO15VENDOREXPERIMENT=1
.
snips-v0.0.7-darwin_amd64.tar.gz
.snips
into a
directory that in the $PATH
environment variable, for example
/usr/local/bin
.snips --help
to get started.Snips takes API specifications and template to generate lots of code for APIs, then these generated code plus the handcrafted code makes up the SDK. Next, we use scenario based test to make sure our SDKs are working properly, and ensure their functional consistency.
+---------------------------------------------+--------------------+
| | Workflow Diagram |
| API Specifications +--------------------|
| + |
| | Scenario |
| Templates | +-------------> Based |
| + | +------>SDKs Testing |
| | | | ^ + |
| | v | | | |
| +-----> Snips+---+ | | |
| | | |
| | v |
| Handcraft+------------------+ Publish |
| |
+------------------------------------------------------------------+
Let's take Go SDK for QingStor (qingstor-sdk-go
) for
example.
./specs/qingstor
: Refer to the QingStor API specifications
./test/features
: Refer to the QingStor SDK test scenarios
Tips: Include these files as git submodule.
Create template files which will be used to generate API code in ./template
.
Generate code using snips, and format the generated code.
$ snips --version
snips version 0.3.6
$ snips -f ./specs/qingstor/2016-01-06/swagger/api_v2.0.json \
-t ./template \
-o ./service
Loaded templates from ./template
4 template(s) detected.
Loaded specification file ./specs/qingstor/2016-01-06/swagger/api_v2.0.json (Swagger-v2.0)
Generating to: ./service/qingstor.go
Generating to: ./service/bucket.go
Generating to: ./service/object.go
Generating to: ./service/types.go
Everything looks fine.
$ gofmt -w .
Implement test scenarios in ./test
.
$ ls ./test
bucket.go config.yaml.example test_config.yaml
bucket_acl.go features test_config.yaml.example
bucket_cors.go main.go utils.go
bucket_external_mirror.go object.go vendor
bucket_policy.go object_multipart.go
config.yaml service.go
Running scenarios test, and pass all tests.
$ pushd ./test
$ go run *.go
...
38 scenarios (38 passed)
84 steps (84 passed)
1m2.408357076s
$ popd
Every time the QingStor API changes, just update the specs/qingstor
and
./test/features
submodule and regenerate code. Then add/change test for this
API change, and rerun the online test to make sure the SDK is working properly.
Please see Contributing Guidelines
of this project
before submitting patches.
The Apache License (Version 2.0, January 2004).