snips

A code generator for RESTful APIs.

Github星跟踪图

Snips

Build Status
Go Report Card
License

A code generator for RESTful APIs.

Introduction

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.

Installation

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.

Install from Source Code

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 git@github.com:yunify/snips.git
$ glide install
$ make install

Notice: You can also use Go 1.5 with the GO15VENDOREXPERIMENT=1.

Download Precompiled Binary

  1. Go to releases tab and download the binary for your operating
    system, for example snips-v0.0.7-darwin_amd64.tar.gz.
  2. Unarchive the downloaded file, and put the executable file snips into a
    directory that in the $PATH environment variable, for example
    /usr/local/bin.
  3. Run snips --help to get started.

SDK Development Workflow

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, +------------------------------------------------------------------+

Add an SDK for Another Programing Language

  1. Create handcraft files of SDK, to handle configuration, network request and etc.
  2. Writing templates for API code.
  3. Generate code using snips.
  4. Running tests.
  5. Publish.

Update an Exists SDK

  1. Change handcraft files (if needed) and update the API specs.
  2. Regenerate code.
  3. Running tests.
  4. Publish.

Example

Let's take Go SDK for QingStor (qingstor-sdk-go) for
example.

Prepare

Tips: Include these files as git submodule.

Procedures

  1. Create template files which will be used to generate API code in ./template.

  2. 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 .
    
  3. 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
    
  4. Running scenarios test, and pass all tests.

    $ pushd ./test
    $ go run *.go
    ...
    38 scenarios (38 passed)
    84 steps (84 passed)
    1m2.408357076s
    $ popd
    
  5. 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.

References

Contributing

Please see Contributing Guidelines of this project
before submitting patches.

LICENSE

The Apache License (Version 2.0, January 2004).

主要指标

概览
名称与所有者qingstor/snips
主编程语言Go
编程语言Makefile (语言数: 2)
平台
许可证Apache License 2.0
所有者活动
创建于2016-12-03 02:14:44
推送于2018-06-01 06:53:33
最后一次提交2018-06-01 14:47:36
发布数28
最新版本名称v0.3.6 (发布于 2018-04-25 14:17:47)
第一版名称v0.0.7 (发布于 )
用户参与
星数83
关注者数12
派生数21
提交数123
已启用问题?
问题数6
打开的问题数0
拉请求数54
打开的拉请求数0
关闭的拉请求数13
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?