あー…
楽してAPIの固定値だけ返せるAPIのモックサーバーを立てたいなー…しかしjsとか入れるのだるいな…*1 .NETでうまくできないかな…
そんな時に調査したときに見かけました。
Mockacoって奴を。
ということで縁あって触ってみたら、思いの外ローカロリーで構築できたのでせっかくなので紹介。
やってることはReadmeに書かれている事ですのであしからず。
Mockacoとは
当ブログ記事のタイトル通り
dotnetコマンドだけでAPIモックサーバーが作れる奴なのである!
試した弊環境
API Mockサーバーを建てるぞ
dotnet toolコマンドでMockacoを入れる。
dotnet tool install -g mockaco
無事に入ると無事にインストできたよと出力される。やさしいね。
とりあえず起動する
Mockaco用にディレクトリを作成して、以下のコマンドでサーバーを起動する。コマンドからわかるlocalhost:5000で起動される感。
dir>mockaco --urls "http://localhost:5000"
おさるさんの出力がされればほぼサーバー起動が成功したと言っても過言ではない。
ちなみにこれ用にディレクトリを作成する理由として、Log用のフォルダが勝手に作られる。なので誤って適当にMyDocument直下とかやると謎のLogフォルダができるので、新規フォルダで作ると良いと思う。
固定で返したいJSONを定義する
Mocks
フォルダを先程出来たLogディレクトリと同じ階層に作る。そしてその中にJSONファイル(ファイル名と中身は下記参照)を作る。
Mocks\PingPong.json
{ "request": { "method": "GET", "route": "ping" }, "response": { "status": "OK", "body": { "response": "pong" } } }
保存を忘れずに。私は保存をうっかり忘れててエラーを起こしました。
APIを投げる
GET http://localhost:5000/ping
を投げると画像のようにpong
しかないJSONレスポンスが返ってくる。
サーバーは起動しっぱなし!なので再起動なし!
コードのコの字を書かずにAPIモックサーバーが出来た!
ね、簡単でしょう?
XMLのレスポンスを返したい
諸々の事情でXMLのレスポンスがいい!とあればこんなJSONを定義すれば良い。
{ "request": { "method": "GET", "route": "message" }, "response": { "status": "OK", "headers": { "Content-Type": "application/xml" }, "body": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><memo>koreha xml dayo</memo>" } }
bodyにXMLを定義する。諸々エスケープする必要があるので注意。
GET http://localhost:5000/message
を投げると画像のようなしょーもないXMLが返ってくる。
こんな感じで、GET以外にも他のメソッドも使えるし、JSONの中にC#でスクリプト書いて値変化させる等ができるっぽいので中々手軽で便利だと思う。
JSONのキー名でなんの設定かわかるので、あんまり深く考えずにサクッと定義できそうで良い。実サービス構築するのだるい時とかに、リクエスト&レスポンスさえわかればさくっと構築できるので、わりと使えそうと思います。
最後に
GithubのReadmeに書かれている物を真似ればいいだけなのですが、日本語の資料もなさそうだし、ということで布教する感覚で書きました。
APIモックサーバーは色々ありますが、.NET環境縛りならこれでも良いと思います。選択肢の一つになれれば幸いです。
現場からは以上です。
*1:dockerは会社利用だと気楽に試せなくなったなと思うんだ