Node.jsで暗号資産アービトラージ

ビットコイントレード中心にNode.jsで実際に作るためのレシピ

仮想通貨取引所API利用時に必須のテストデータ用ライブラリ(json-server)

仮想通貨取引所APIでツールを作る時に便利なテストデータ用のmockを手軽に作れるライブラリ(json-server)の紹介です。

次のような方向けの記事となります。

「ツールのテストデータをどうやって準備するのか知りたい」
「ツールのテスト用に簡単に使えるmockを探している」

json-serverでmockを作ると便利

mockとは

前提ですが、API利用時はhttps通信を利用して接続先の取引所にデータを取りに行くことになります。
その際、接続先を自分のPCに設定することで取引所に接続せずにテストできるようになります。(この記事ではmockと呼びます)

mockを使わずに色々なパターンのテストデータを準備しようとするとコードに直書きすることになってしまうので、mockを用意した方が品質は上がります。

json-serverのメリット

私はjson-serverを知ったのがツール構築してしばらく経ってからだったのですが、探さなかったのを本気で後悔するぐらい便利で簡単です。

詳細は後述しますが、写真のようにjson形式でテストデータを記載して、json-serverコマンドを実行するだけでmockを起動することができます。

db.jsonのサンプル

API利用時のエンドポイント(共通のURL)を自分のPC(localhost)に指定することでjson形式のテストデータファイルからデータを取得することができます。

POSTもできる

json-serverでmockを作る際にはGETリクエスト(データ取得)だけでなく、POSTリクエスト(データ更新)をすることも可能です。

POSTリクエストすると下の写真のようにjson形式のテストデータにPOSTしたデータが追加されます。

db.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の設定が重複していないか確認してみてください。

www.kennejs.com