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')
components = ['models', 'apis']
dependsOn validation
doLast {
copy {
from "${code.outputDir}/src/main/java/io/github/yuokada/swagger/demoapi"
into "src/main/java/io/github/yuokada/swagger/demoapi"
}
}
}
ui {
doLast {
copy {
from 'index.html'
into outputDir
}
}
}
}
}
github.com
これでyamlを更新したら適宜コード生成をする環境が整ったのでガンバっていけそう。