uokadaの見逃し三振は嫌いです

ここで述べられていることは私の個人的な意見に基づくものであり、私が所属する組織には一切の関係はありません。

swagger-codegenをやってみた。

github.com

仕事でWebAPIを作る必要があってせっかくだからswaggerをやっている。 本当はgrpcかthriftみたいなバイナリプロトコルでやりとり出来るものがやりたいんだけどリクエスト数も少なくブラウザからリクエストすることもありそうなので素直にHTTPでやりとり出来るWebAPIを作っている。

thrift, grpcなら定義ファイル自体がドキュメントになるんだがWebAPIのドキュメントを書くとなるとメンテナンス性なども考えることが出てくる。 WebAPIを長期間運用したことがあるけどいろいろな理由をつけてドキュメントの更新は後回しになりがちなのでそうならないようにちょっとswaggerでドキュメントの生成とさらにコードの生成を自動化したいなと思い使ってみている。

今はSwagger Editorのサンプルコードを動かしつつswaggerがどういったものかの理解を進めている。

Swagger Editor

それに合わせてyamlを更新したら簡単に成果物を生成したかったのでgradleの設定を書いている。

plugins {
    id 'org.hidetake.swagger.generator' version '2.12.0'
}

group 'io.github.yuokada'
version '1.0-SNAPSHOT'

apply plugin: 'groovy'
apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    jcenter()
    mavenCentral()
}

dependencies {
    swaggerCodegen 'io.swagger:swagger-codegen-cli:2.3.1'
    swaggerUI 'org.webjars:swagger-ui:3.10.0'

    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    compile 'org.codehaus.groovy:groovy-all:2.3.11'

    testCompile group: 'junit', name: 'junit', version: '4.12'
}

swaggerSources {
    petstore {
        inputFile = file('src/main/resources/swagger/v1.yaml')
        code {
            language = 'spring'
            configFile = file('src/main/resources/swagger/config.json')
            outputDir = file('output')
            // Generate only models and controllers
            components = ['models', 'apis']
            dependsOn validation

            doLast {
                copy {
                    from "${code.outputDir}/src/main/java/io/github/yuokada/swagger/demoapi"
                    // from 'output/src/main/java/io/github/yuokada/swagger/demoapi/impl/*.java'
                    into "src/main/java/io/github/yuokada/swagger/demoapi"
                }
            }
        }
        ui {
            doLast {
                copy {
                    from 'index.html'
                    into outputDir
                }
            }
        }
    }
}

github.com

これでyamlを更新したら適宜コード生成をする環境が整ったのでガンバっていけそう。