はじめに
2023年アドベントカレンダー14日目です。
前回からBFFの開発を始めるために環境構築をしています
WireMock
WireMockとは
WireMockは、モックサーバーを簡単に構築するためのツールです。
主にテストで使われて、実際のサーバーの代わりに動作し、APIのモックをすることができます。
Dockerで起動
wiremockはjava上で動作するアプリケーションなので、javaのimageを使って構築していきます
Dockerfile
FROM openjdk:8-jre-alpine
ENV WIREMOCK_VERSION 2.27.2
RUN wget https://repo1.maven.org/maven2/com/github/tomakehurst/wiremock-standalone/${WIREMOCK_VERSION}/wiremock-standalone-${WIREMOCK_VERSION}.jar -O wiremock-standalone.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "wiremock-standalone.jar"]
モックしたい情報を./mappings/*に設置します
mock_get_blogs.json
{
"request": {
"method": "GET",
"url": "/blogs"
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json"
},
"jsonBody": {
"blogs": [
{
"id": "8c7cf457-5ffe-44c3-98b3-c529c09e9999",
"title": "title1",
"author": "author1",
"body": "body1",
"createdAt": "2019-01-01T00:00:00.000Z"
}
]
}
}
}
起動してみます
#!/bin/bash
# イメージをビルドする
docker build -t wiremock .
# コンテナを実行する
docker run -it --rm -p 8080:8080 -v "$(pwd)/mappings:/mappings" --name wiremock wiremock
Dockerのみでも十分動きますが、一応docker composeでも動くようにcompose.yamlファイルを載せておきます
compose.yaml
version: '3'
services:
app:
build: .
ports:
- '8080:8080'
volumes:
- './mappings/:/mappings'
tty: true
stdin_open: true
docker compose up
では起動していきます
$ docker run -it --rm -p 8080:8080 -v "$(pwd)/mappings:/mappings" --name wiremock wiremock
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
/$$ /$$ /$$ /$$ /$$ /$$
| $$ /$ | $$|__/ | $$$ /$$$ | $$
| $$ /$$$| $$ /$$ /$$$$$$ /$$$$$$ | $$$$ /$$$$ /$$$$$$ /$$$$$$$| $$ /$$
| $$/$$ $$ $$| $$ /$$__ $$ /$$__ $$| $$ $$/$$ $$ /$$__ $$ /$$_____/| $$ /$$/
| $$$$_ $$$$| $$| $$ \__/| $$$$$$$$| $$ $$$| $$| $$ \ $$| $$ | $$$$$$/
| $$$/ \ $$$| $$| $$ | $$_____/| $$\ $ | $$| $$ | $$| $$ | $$_ $$
| $$/ \ $$| $$| $$ | $$$$$$$| $$ \/ | $$| $$$$$$/| $$$$$$$| $$ \ $$
|__/ \__/|__/|__/ \_______/|__/ |__/ \______/ \_______/|__/ \__/
port: 8080
enable-browser-proxying: false
disable-banner: false
no-request-journal: false
verbose: false
起動しました 👍
ではマッピングを確認してみましょう
/__admin/mappings
で登録されているマッピングを確認できます。
$ curl http://localhost:8080/__admin/mappings | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 619 0 619 0 0 276k 0 --:--:-- --:--:-- --:--:-- 302k
{
"mappings": [
{
"id": "2b7edb61-beec-4ad7-bab5-a430f6871278",
"request": {
"url": "/blogs",
"method": "GET"
},
"response": {
"status": 200,
"jsonBody": {
"blogs": [
{
"id": "8c7cf457-5ffe-44c3-98b3-c529c09e9999",
"title": "title1",
"author": "author1",
"body": "body1",
"createdAt": "2019-01-01T00:00:00.000Z"
}
]
},
"headers": {
"Content-Type": "application/json"
}
},
"uuid": "2b7edb61-beec-4ad7-bab5-a430f6871278"
}
],
"meta": {
"total": 1
}
}
/blogs
にマッピングされていることが確認できましたので、リクエストを送ってみます。
$ curl http://localhost:8080/blogs | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 147 0 147 0 0 32967 0 --:--:-- --:--:-- --:--:-- 36750
{
"blogs": [
{
"id": "8c7cf457-5ffe-44c3-98b3-c529c09e9999",
"title": "title1",
"author": "author1",
"body": "body1",
"createdAt": "2019-01-01T00:00:00.000Z"
}
]
}
いい感じですね👍
これでBFFの開発を進められるので、こちらのストーリーはDoneになりました
次回からは実際にBFFの実装を進めていきます