hoverflyをdocker-composeで動かしてみる
1. hoverflyとは
- HoverflyはオープンソースのAPIシミュレーションツール
- Go言語で実装されている
-
SaaSとしても提供されている
2. 特徴
- APIをシミュレートすることで開発中のAPIへ依存せず自分達のプロダクトの開発を進めることができる
- プロキシを使って本番のAPIトラフィックをキャプチャし、それを再生できるためテストが簡単
- 記録したリクエストとレスポンスデータをエクスポート/インポートが可能
- JSON Schemaを使ってAPIの検証が可能
- テストデータのランダム生成やレイテンシの設定など柔軟なカスタマイズが可能
- CLIやREST APIが利用できるためCI/CDパイプラインとの統合がしやすい
- ワンバイナリで動作するのでCI/CDに組み込みやすい
3. セットアップ
- Dockerのイメージが公開されているので、
docker-compose
で動かしてみる
version: '3.8'
services:
hoverfly:
container_name: hoverfly
image: spectolabs/hoverfly:latest
entrypoint:
[
"/bin/hoverfly",
"-listen-on-host=0.0.0.0"
]
ports:
- 8500:8500
- 8888:8888
$ docker compose up
4. モックサーバの構成
- 先述の状態ではモックAPIの定義が何も入っていないのでリクエストを送信してもエラーになる
$ curl -i http://localhost:8500
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain; charset=utf-8
X-Content-Type-Options: nosniff
Date: Sat, 11 Nov 2023 16:25:41 GMT
Content-Length: 64
This is a proxy server. Does not respond to non-proxy requests.
version: '3.8'
services:
hoverfly:
container_name: hoverfly
image: spectolabs/hoverfly:latest
entrypoint:
[
"/bin/hoverfly",
"-listen-on-host=0.0.0.0",
"-import=/data/hoverfly.io.json",
"-webserver"
]
ports:
- 8500:8500
- 8888:8888
volumes:
- type: bind
source: "."
target: "/data"
$ tree
.
├── docker-compose.yaml
└── hoverfly.io.json
$ curl -i http://localhost:8500
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: max-age=3600
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Date: Tue, 30 May 2017 13:23:09 GMT
Etag: "82b6bafbc0c4af5e3886d07802f4b62d"
Hoverfly: Was-Here
Last-Modified: Fri, 19 May 2017 10:59:12 GMT
Server: nginx
Strict-Transport-Security: max-age=31556926
Vary: Accept-Encoding
Via: 1.1 varnish
X-Cache: HIT
X-Cache-Hits: 1
X-Powered-By: Express
X-Served-By: cache-lhr6323-LHR
X-Timer: S1496150589.426034,VS0,VE0
Transfer-Encoding: chunked
trololou
- JSONにモックAPIの定義を追加していくことで自由にレスポンスを定義することが可能になる
- ここではサーバ起動時に定義ファイルを読み込ませる方法を採ったが、CLIツールやREST APIから定義の追加・更新・削除が可能である
参考資料