【OpenAPI】PrismでOpenAPIドキュメントからモックサーバーを起動する
Prism
Stoplight 社が提供する1OpenAPI ドキュメントからモックサーバーを起動するツール。format は OpenAPI2/3 をサポートする。
Usage
Install
Prism は node 上で実行されるため、node 実行環境を用意してインストールする。
Docker
node サーバーコンテナを立ててその中にインストールする例( 一応 Prism コンテナイメージをそのまま起動することはできる)
FROM node:14.14 WORKDIR /openapi COPY ./openapi.yml . # install stoplight/prism RUN npm install -g @stoplight/prism-cli # exec - specify host as 0.0.0.0 to connect from docker host. CMD ["prism", "mock", "openapi.yml", "--host", "0.0.0.0"]
Prism インストール後、 prism mock [openapi doc]
でモックサーバーを起動する。
OpenAPI ドキュメント上で定義されたパスのうち、Path Parameter の指定はランダムに変化する。
$ docker build -t rennnosuke/prism-test . $ docker run -it -p 4010:4010 rennnosuke/prism-test [10:57:16 AM] › [CLI] … awaiting Starting Prism… [10:57:16 AM] › [CLI] ℹ info POST http://0.0.0.0:4010/pet [10:57:16 AM] › [CLI] ℹ info PUT http://0.0.0.0:4010/pet [10:57:16 AM] › [CLI] ℹ info GET http://0.0.0.0:4010/pet/findByStatus?status=pending,sold,available,available,sold,sold,pending,sold,pending,available,sold,pending,sold,available,available,available,pending,sold,available,pending [10:57:16 AM] › [CLI] ℹ info GET http://0.0.0.0:4010/pet/findByTags?tags=doloribus,consequuntur,expedita,tempora,temporibus,nemo,adipisci,molestiae,reprehenderit,voluptatibus,laboriosam,sed,pariatur,culpa,dicta,illum,qui,repellat,adipisci,incidunt [10:57:16 AM] › [CLI] ℹ info GET http://0.0.0.0:4010/pet/762 [10:57:16 AM] › [CLI] ℹ info POST http://0.0.0.0:4010/pet/447 [10:57:16 AM] › [CLI] ℹ info DELETE http://0.0.0.0:4010/pet/951 [10:57:16 AM] › [CLI] ℹ info POST http://0.0.0.0:4010/pet/576/uploadImage [10:57:16 AM] › [CLI] ℹ info GET http://0.0.0.0:4010/store/inventory [10:57:16 AM] › [CLI] ℹ info POST http://0.0.0.0:4010/store/order [10:57:16 AM] › [CLI] ℹ info GET http://0.0.0.0:4010/store/order/4 [10:57:16 AM] › [CLI] ℹ info DELETE http://0.0.0.0:4010/store/order/141 [10:57:16 AM] › [CLI] ℹ info POST http://0.0.0.0:4010/user [10:57:16 AM] › [CLI] ℹ info POST http://0.0.0.0:4010/user/createWithArray [10:57:16 AM] › [CLI] ℹ info POST http://0.0.0.0:4010/user/createWithList [10:57:16 AM] › [CLI] ℹ info GET http://0.0.0.0:4010/user/login?username=non&password=provident [10:57:16 AM] › [CLI] ℹ info GET http://0.0.0.0:4010/user/logout [10:57:16 AM] › [CLI] ℹ info GET http://0.0.0.0:4010/user/placeat [10:57:16 AM] › [CLI] ℹ info PUT http://0.0.0.0:4010/user/qui [10:57:16 AM] › [CLI] ℹ info DELETE http://0.0.0.0:4010/user/ex [10:57:16 AM] › [CLI] ▶ start Prism is listening on http://0.0.0.0:4010
$ curl -XGET -s -D "/dev/stderr" -H "Content-type: application/json" http://0.0.0.0:4010/store/inventory HTTP/1.1 200 OK Access-Control-Allow-Origin: * Access-Control-Allow-Headers: * Access-Control-Allow-Credentials: true Access-Control-Expose-Headers: * Content-type: application/json Content-Length: 29 Date: Sun, 18 Oct 2020 11:01:52 GMT Connection: keep-alive Keep-Alive: timeout=5 {"property1":0,"property2":0}
tips
動的レスポンス生成
Prism ではレスポンスの値を動的に生成できる。
x-faker
プロパティを Schema プロパティ上に定義することで、レスポンス中の値がランダム生成されるようになる。
指定方法は Faker.js
に従う。
(公式より引用)
Pet: type: object properties: id: type: integer format: int64 name: type: string x-faker: name.firstName example: doggie photoUrls: type: array items: type: string x-faker: image.imageUrl
$ curl http://127.0.0.1:4010/pets/123 -H "Prefer: dynamic=true" { "id": 12608726, "name": "Addison", "photoUrls": [ "http://lorempixel.com/640/480", "http://lorempixel.com/640/480", "http://lorempixel.com/640/480", "http://lorempixel.com/640/480" ] }
Definition Engine
Prism モックサーバーがリクエストを受け取ったときのレスポンス決定ルール。 Mock をより精密に動作させるために、また OpenAPI ドキュメントの項目を充実するために使える。
参考文献
-
OpenAPI ドキュメントの編集ツールstoplight studioも便利↩