モックサーバーを簡単準備 WireMockノススメ

 

こんにちは。
調子こいてTafs Adventカレンダー2023に2日目の投稿のMPPAです。

今日は開発によく必要とされるモックサーバーを準備しようという記事です。

👹お品書き👺
1. 本日のゴール
2. モックサーバーってなに?
3. 環境準備
4. WireMockを用意して起動してみよう
5. WireMockに準備したAPIを呼んでみる
6. さいごに


1.本日のゴール

本日のゴールはモックサーバーWireMockを起動して、設定を行ったAPIをコールしてみます。

2.モックサーバーってなに?

モックサーバーとは。。「スタブ(Stub)」っていうとしっくりくる人もいるでしょうか。色々調べてみましたがREST APIの値を疑似的に返すサーバーという定義でよさそうです。やろうと思えば普通にHTMLも返却できます。Apacheで設定ファイルいじってパスを再現するよりも私は楽かなと考えますが、これもきっと慣れでどっちでもOKかと。

自分なりにモックサーバーの使い道考えてみました。

  • 開発している自APIが他サーバーのAPIをコールしてる時のスタブとして。
  • WebUI開発時にサーバーサイドAPIのスタブとして。
  • 要件定義~基本設計にてユーザーに見せるためのWebUIの紙芝居をあたかも
    動作しているかのように見せるためのスタブとして。
  • 開発が遅い○○プロジェクトで、ダミーを返すインターフェースすら作られていない状況でのスタブとして(これは実現できないでしょう)
一番最初に書いた使い道がメインです。

3.環境準備(要リンク埋め込み)

今回も第一弾に引き続き、AWSを使って試してみます。
Dockerコンテナを利用するのが実用的ではありますが、
今回サーバーは。。。第一弾「RD Gatewayを使ってかっこよくクラウド上のWindowsVMに接続する」で作成したVMをそのまま使ってみます。
不安点とすれば今回題材とするWireMockがJavaベースなので、t2.microでちゃんと動いてくれるのかってところですが😓

正直、コンテナだろうがVMだろうが動けばいいと思います。

4.WireMockを用意して起動してみよう

まずはWireMock公式サイトからWireMockを入手。
Maven、Gradle、Dockerなど様々なテンプレートが用意されている中、
あえてStandaloneを選択します!
Standaloneならソースに組み込む必要もないので開発者じゃなくてもみんな使えますね!
(Dockerでもいいじゃんという突っ込みはなしで)



お気づきでしょうか。
jarファイルなんです。ってことはJavaが必要なんです。(さっきJavaベースって言ったし)
今日現在こなれたJava17をダウンロードしておきます。
 → Java8 ランタイムでも大丈夫です。



VMを起動し、上2つのファイルをコピーしてJavaをインストール。
WireMockは適当な場所に置きましょう。
(サンプルではC:\apps\wiremockに配置しました)

なにもありませんが、とりあえず起動してみます。
起動コマンドは、、
java -jar wiremock-standalone-3.3.1.jar
(ファイル名にダウンロードしたjarファイルを指定)

なにもAPIが定義されてませんが、これで起動できることがわかりました。
※デフォルト設定ではt2.microでは耐えられなかった(スケールアップしてます)

5.WireMockに準備したAPIを呼んでみる

次にAPIのMockを定義してみます。
作業フォルダを決め、APIの定義フォルダを用意します。

<作業フォルダ>ーーmappings
        └ー__files
mappingsmockの定義Jsonを保存するフォルダ
__filesレスポンスのメッセージをファイルから取得する際のファイル置き場

__filesは情報量の多いレスポンスを返却する場合や、WireMockのTemplateAPIを自在に使いこなして、レスポンスを生成する際に便利です。

まずはmappingsにMockのJsonファイルを配置します。
Jsonファイル名は任意です。

簡単なAPI定義を記述します。
{
  "request": {
    "method": "GET",
    "url": "/some/thing"
  },

  "response": {
    "status": 200,
    "body": "Hello, world!",
    "headers": {
        "Content-Type": "text/plain"
    }
  }
}
本家からHello,worldをパクってきました。
これをhello.jsonで配置します。
早速WireMockを起動します。
(起動している場合は再起動します)

ポートは8080
APIのURLは/some/thingで定義してありますので
http://localhost:8080/some/thing になります。

RestClientにPostmanを使いました。
実行結果です。

無事に接続が完了しました。

6.さいごに

今回はWireMockの高度な利用方法は扱いませんでしたが、
このようなものがあるんだなと思っていただければ幸いです。

自分は業務の中で、リクエストデータに基づいてXMLファイルを生成し返却するmockを作成しました。もはやmock+ぐらいになってますが実装するよりははるかに楽にAPIを開発者に提供することができました。

極めたい方はこちらをベースにググってチャレンジしてみてください。

コメント

このブログの人気の投稿

ProxmoxでLet's Encryptを使用した証明書セットアップをやってみた

AIと共に「考える」エンジニアに!

ルーティングって何で必要で、何してるの?を React Routerで理解する