Python×Flaskで超お手軽Mock Serverを開発して公開

経緯

過去いくつかのシステム開発プロジェクトに参画させていただきました。
そんななかでフロントエンド⇔バックエンドのやり取りでAPIを使ったり、または、バックエンドにいくつかのサービスが立ち上がっていてそのサービス間でAPIでやり取りするというケースをまま見ました。
そういったシステムの開発ではMock Serverを立てて開発を行うことがよくあります。
ただMock Serverを使おうにも

  • 既成のツールを使いたいがツール側のクラウドにリクエスト・レスポンスなどの情報が保存されてしまう。
  • 既成のツールだと微妙にシステム特有の仕様に沿わなくて使えない。

というような状況がたびたびあるかなと。

上記のような状況の時、、、時には上記のような条件がない時でさえMock Serverを自作したりと無駄な工数を使ったことが思い返すだけでも山のようにあります。

もうこれ以上、車輪の再開発を繰り返して無駄な車輪のゴミの山を作らないように誰でもメンテできるMock Serverの超ひな型を作りました。

最低限Mock Serverに求めること

  • 誰でも容易に拡張できること。
  • 簡単に配布できる状態にできて、配布された側も何も準備なしでツールを使えること。
  • リクエストパス・メソッドに応じてレスポンスが設定できること。

Github

結論、成果物を見ていただいたほうが早いと思うのでGithubのリンクを載せておきます。

simple-python-mock

ソースはこちらに保存してあります。
当記事では基本的にこのGitHubに記載があるような内容にはあまり触れません。
使ってみたかったり、ソースが欲しい場合には上記Githubから落としてください。

ちなみにほぼネットのコピペでつくったソースです。

採用技術と選んだ理由

項目 技術 理由
言語 Python ・言語自体の学習コストが経験則的に低く誰でも拡張開発が可能だと判断したため。
Pythonの実行環境がない同僚に配布することを考えたときにpyinstallerを使って超手軽にexe化して環境ごと配布できると考えたため。
フレームワーク Flask ・さくっと調べたところPythonフレームワークの中でも特にとっつきやすく学習コストが低いと考えたため。

実際に使ってみる

レスポンスJSON定義ファイルを以下のように設定して8888でサーバーを立ち上げます。

{
    "sample": {
        "method": "GET",
        "path": "test/(.*)/sample",
        "response": {
            "status": 200,
            "body": {
                "message": "sample",
                "nestMessage": {
                    "message": "OK"
                }
            }
        }
    },
    "DEFAULT": {
        "method": "DUMMY",
        "path": "DUMMY",
        "response": {
            "status": 500,
            "body": {
                "messsage": "Mock Server cannot find mock response."
            }
        }
    }
}

Postmanからリクエストを投げるとレスポンスJSON定義ファイルのbodyに記載された内容が返却されます。

定義したパスやメソッドに合わないリクエストを投げるとDEFAULTの定義が返却されます。

今後

ほんとにザクっとベースを作っただけなので、今後私含め誰かの手で拡張していけたらいいなと思います。

こういうこともツールのベースとしては実装しておいたほうがいいんじゃない?っていうことがあれば教えていただけるとありがたいです。