json-serverを使ってAPIサーバへのリクエスト回数を抑えつつ整形表示して確認しやすくする方法を模索してみた

APIサーバからのJSONレスポンスを、アクセス回数を極力へらしつつ手間かけずに整形表示できないか試行錯誤した結果をまとめました。
2019.10.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

JSONレスポンスを返すAPIを叩いて、結果を元にバッチ処理を作成することはよくありますが、返ってくるJSONが整形されているかどうかはCLI等のツールを使っているかに依ります。

とりあえずファイルへ出力した状態で、かつ出力されたデータが未整形で膨大でもイイ感じに手間掛けずに整形確認できる状態にならないかと考えて試行錯誤した結果をまとめました。

json-serverでのローカルAPI化

REST APIがお手軽に作成できるnode.jsのライブラリを利用します。

% npm install -g json-server

同じディレクトリ内にAPIレスポンスが収まったJSONファイルを置いて、以下のコマンドを実行します。今回はBacklogAPIを例にします。

% export APIKEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
% echo " {'object':" > test.json
% curl -s -G "https://DOMAIN.backlog.jp/api/v2/issues" -d "count=100" -d "apiKey=$APIKEY" -d "projectId[]=XXXXXXXXX" -d "sort=updated" -d "updatedSince=$(date -v-7d '+%Y-%m-%d')" >> test.json
% echo "}" >> test.json
% json-server --watch test.json
{^_^}/ hi!
Loading test.json
  Done
Resources
  http://localhost:3000/object
Home
  http://localhost:3000

APIのレスポンスを収める前後で細かい出力を行っていますが、JSON Objectとして扱うためです。

ローカルで出力確認する

http://localhost:3000/objectへアクセスすることでJSONレスポンスが出力されます。curlでGETしてみるとわかりますが、出力がキレイに整形されています。

% curl http://localhost:3000/object
[
  {
    ..
    ..
    "created": "2019-08-21T01:51:18Z",
    "updatedUser": {
      "id": ......,
      "userId": "......",
      "name": "....",
      "roleType": 2,
      "lang": "ja",
      "mailAddress": "........",
      "nulabAccount": {
        "nulabId": "........",
        "name": "....",
        "uniqueId": "...."
      },
      "keyword": ".........."
    },
    "updated": "2019-09-27T01:39:16Z",
    "customFields": [],
    "attachments": [],
    "sharedFiles": [],
    "stars": []
  }
]

あとは煮るなり焼くなりしつつ、APIの実行回数にとらわれずに実装するだけです。

なお、ブラウザでのアクセスを行う場合は、JSONViewアドオンの導入をおすすめします。

あとがき

URLでのAPIアクセスはレスポンスの取り扱いが若干手間と感じていたことと、確認するたびにリクエストするのもスマートではないなと感じ、ローカルで色々済ませられないかと検討した結果となりました。

下記記事のように、テストにおける手軽なJSON APIモックとしても利用可能なため、テスト用サーバの実装をどうするか悩んでいる場合にもおすすめです。

json-serverでREST APIモックサーバを立てテスト駆動開発する | Black Everyday Company