1. APIのレスポンスをきれいに表示する(curlとjq)
curl で取得したJSONデータは、1行にまとまっていて読みにくいことがよくあります。そこで、jq コマンドをパイプ(|)でつなぐのが定番の組み合わせです。
JSONを整形して表示する
curl -s https://api.example.com/data | jq .
-s は、ダウンロードの進捗ゲージなどの余計な出力を表示しないためのオプションです。取得したレスポンスを jq . に渡すことで、インデントされた読みやすいJSONとして画面に出力されます。
エラーメッセージは確認したい場合、進捗表示だけを消す -sS の組み合わせも便利です。
curl -sS https://api.example.com/data | jq .
jq がインストールされていない環境ではコマンドが見つからないというエラーになります。UbuntuやDebian系では sudo apt install jq でインストールできます。2. curlで自分のIPアドレスを確認する
外部のWebサービスから見えている自分のグローバルIPv4アドレスは、curl で ipify のAPIへアクセスすると確認できます。
curl -s https://api.ipify.org
echo
APIから返されるIPアドレスには改行が付かないため、続けて echo を実行して表示を改行しています。1コマンドで改行まで含めたい場合は、次のようにも書けます。
curl -sS -w '\n' https://api.ipify.org
ここで表示されるのは、インターネット側から見えるグローバルIPアドレスです。LAN内で使われている 192.168.x.x などのプライベートIPアドレスとは異なります。また、VPNやプロキシを利用している場合は、その出口側のIPアドレスが表示されます。
4. ネットワークの疎通やポートを確認する(pingとnc)
「APIが応答しない」「サーバーに接続できない」という時に、サーバーまでの通信経路と待ち受けポートを分けて調べることで、原因を切り分けられます。
サーバー自体が応答するか確認する(ping)
ping -c 4 example.com
-c 4 を付けることで、4回だけ通信して自動終了します。応答の有無に加えて、パケットロスや往復時間も確認できます。
ping には応答しません。疎通確認の結果だけでサーバーが停止しているとは判断せず、続けて対象ポートも確認します。特定のポートが開いているか確認する(nc / netcat)
次の例では、example.com のHTTPSで使われる443番ポートへ接続できるかを調べます。
nc -vz example.com 443
-v は結果を詳しく表示するオプション、-z はデータを送信せずにポートの接続可否だけを調べるオプションです。通信エラーが発生した際、アプリケーションの問題なのか、ネットワークやファイアウォールの問題なのかを切り分ける手掛かりになります。
接続に失敗する原因には、ファイアウォールによる遮断だけでなく、DNSや通信経路の問題、サーバー側で対象ポートが待ち受けていないことなどもあります。nc の結果だけで原因を断定せず、エラーメッセージやサーバー側の状態も併せて確認します。
nc が入っていないUbuntuやDebian系の環境では、sudo apt install netcat-openbsd などでインストールできます。