swagger-codegenをやってみた。
仕事でWebAPIを作る必要があってせっかくだからswaggerをやっている。 本当はgrpcかthriftみたいなバイナリプロトコルでやりとり出来るものがやりたいんだけどリクエスト数も少なくブラウザからリクエストすることもありそうなので素直にHTTPでやりとり出来るWebAPIを作っている。
thrift, grpcなら定義ファイル自体がドキュメントになるんだがWebAPIのドキュメントを書くとなるとメンテナンス性なども考えることが出てくる。 WebAPIを長期間運用したことがあるけどいろいろな理由をつけてドキュメントの更新は後回しになりがちなのでそうならないようにちょっとswaggerでドキュメントの生成とさらにコードの生成を自動化したいなと思い使ってみている。
今はSwagger Editorのサンプルコードを動かしつつswaggerがどういったものかの理解を進めている。
それに合わせて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 } } } } }
これでyamlを更新したら適宜コード生成をする環境が整ったのでガンバっていけそう。