概要
- Swagger Specからモックサーバーを自動生成し、ホスティングする
- Swagger SpecはYAMLとJSONの両方に対応。v2とv3の両方に対応
Swaggerって何?という方には Swaggerの概要をまとめてみた。がオススメです。
やったこと
DockerHubのswagger-codegen-cliというイメージを使ってモックサーバーのファイルを生成し、それをnodeイメージでホスティングするDockerFileを作りました。
swagger-codegen-cliはモックサーバーのファイルを生成してくれますが、ホスティングまではしてくれません。
「Dockerイメージをビルド・起動したらモックサーバーが動く!」というのを実現するため、Dockerのマルチステージビルドでやってみました。
dockerfile
GitHubはこちら。JSONへの対応やバージョン3系への対応についても書きました。
dockerfile
FROM swaggerapi/swagger-codegen-cli:2.4.14 as builder
WORKDIR /mock-seed
# ホストマシンのswagger.ymlをコピー
COPY ./swagger.yml ./
WORKDIR /mock-server
# モックサーバーのファイルを作成
RUN java -jar /opt/swagger-codegen-cli/swagger-codegen-cli.jar \
generate -i /mock-seed/swagger.yml -l nodejs-server -o ./
FROM node:14.2.0-alpine3.10 as executor
WORKDIR /mock-server
# 上記で作ったモックサーバーのファイル群をコピー
COPY --from=builder /mock-server ./
# パッケージ類のインストール
RUN npm install
# 8080ポートを受ける
EXPOSE 8080
# コンテナ起動でサーバーが起動するようにする
CMD ["npm", "start"]
docker-compose.yml
合わせて作りましたが、なくても大丈夫です。(GitHub)
docker-compose.yml
version: '3.3'
services:
mock_server:
container_name: mock_server
build: .
ports:
- "8080:8080"
ビルド・起動
swagger.ymlはdockerfileと同じディレクトリに置いてください。
docker-composeを使う場合
docker-compose up --bulid
docker-composeを使わない場合
docker build . -t mock-server
docker run --rm -p 8080:8080 mock-server
ブラウザでlocalhost:8080/docs
にアクセスするとSwaggerUIが表示されます。
localhost:8080/v2/pet/1
等、Swagger Specで定義したURLにアクセスするとサンプルデータが表示されます。
おわりに
筆者は初学者です。間違いなどがあればコメントでご教授ください!