暗号資産取引所APIでツールを作る時に便利なテストデータ用のmockを手軽に作れるライブラリ(json-server)の紹介です。
次のような方向けの記事となります。
「ツールのテストデータをどうやって準備するのか知りたい」
「ツールのテスト用に簡単に使えるmockを探している」
Contents
json-serverでmockを作ると便利
mockとは
前提ですが、API利用時はhttps通信を利用して接続先の取引所にデータを取りに行くことになります。
その際、接続先を自分のPCに設定することで取引所に接続せずにテストできるようになります。(この記事ではmockと呼びます)
mockを使わずに色々なパターンのテストデータを準備しようとするとコードに直書きすることになってしまうので、mockを用意した方が品質は上がります。
json-serverのメリット
私はjson-serverを知ったのがツール構築してしばらく経ってからだったのですが、探さなかったのを本気で後悔するぐらい便利で簡単です。
詳細は後述しますが、写真のようにjson形式でテストデータを記載して、json-serverコマンドを実行するだけでmockを起動することができます。
API利用時のエンドポイント(共通のURL)を自分のPC(localhost)に指定することでjson形式のテストデータファイルからデータを取得することができます。
POSTもできる
json-serverでmockを作る際にはGETリクエスト(データ取得)だけでなく、POSTリクエスト(データ更新)をすることも可能です。
POSTリクエストすると下の写真のようにjson形式のテストデータにPOSTしたデータが追加されます。
注文機能で動作確認をしたい場合などに便利です。設定したデータがきちんと送信されたかを確認することができます。
いきなり取引所のAPIに接続すると誤発注してしまう可能性もあるので、ツール構築の初期の段階から導入しておきたいライブラリです。(私はmockを利用していなかったので何度も誤発注していました。。)
json-serverインストールから接続までの手順
json-serverをインストールする
npmを使ってインストールします。json-serverのGithubサイト
ローカルインストールで上手く動かない場合は-gをつけてグローバルインストールをしてみてください。
npm install -g json-server
テストデータ用のjsonファイルを準備する
json形式のファイルを2つ用意します。以下にサンプルフォーマットも記載しておきます。
・db.json … テストデータ用
・routes.json … リダイレクト設定用
db.jsonはテストデータの取得、更新用です。
routes.jsonはAPI取得用のURLが/を複数含む際にリダイレクトさせるために使います。
//db.jsonのサンプルファイルフォーマット { "ticker": { "last":635940.0, "bid":635940.0, "ask":636219.0, "high":648000.0, "low":612111.0, "volume":2863.91371625, "timestamp":1557064903 }, "balance": { "success":true, "jpy":"296025.49849642", "btc":"0.38130699" } }
取引所のAPIに接続して返却されるデータをコピペすればOKです。
不要なデータは消しても消さなくても正常に動きます。
//routes.jsonのサンプルファイルフォーマット { "/api/ticker":"/ticker", "/api/accounts/balance":"/balance" }
上はコインチェックのAPIの例ですが、コインチェックでBTCの価格を取得する場合、https://coincheck.com/ + api/tickerでリクエストします。
db.jsonに”/api/ticker”は指定できないのでroutes.jsonで”/api/ticker” → “/ticker”にリダイレクトさせています。
jsonサーバを起動する
起動時は–watchオプション、–routesオプションで用意したjsonファイルを読み込んで起動させます。
json-server --watch db.json --routes routes.json
json-serverに接続する
json-serverに接続する際はURLにhttp://localhost:3000/ + routes.jsに指定したURLを指定します。
以下はhttp://localhost:3000/ + api/tickerに接続する例です。
testModeを外部パラメータで指定して、”2″のときはmockを利用するようにすると使い分けが楽になります。
let endpoint = ""; if (testMode === '2'){ endpoint = 'http://localhost:3000/' } else { endpoint = 'https://coincheck.com/' } let getcoincheckPrice = function(){ const path = 'api/ticker'; const url = endpoint + path ; request(url, function (err, response, payload) { let body = JSON.parse(payload); console.log(body.last,body.bid,body.ask) }); }
上手く接続できない時は/が重複、不足していないか、routes.jsonの設定が重複していないか確認してみてください。
コメントを残す