🎠

無料の郵便番号検索APIのレスポンススピード比較

に公開

はじめに

ベンチマークと高速化が大好きな @matsubokkuriです。

郵便番号検索 API は、住所情報を取得する際に頻繁に利用される重要なツールです。
本記事では、3 つの郵便番号検索 API のレスポンススピードを比較し、それぞれのパフォーマンスについて考察します。

計測概要

使用したツール

  • wrk: 高負荷テストツールを使用して、各 API のレスポンススピードを計測しました。

計測条件

テスト内容

各 API に対して 10 秒間リクエストを送り、以下の指標を計測しました:

  • 平均レイテンシー(1 リクエストの平均応答時間)
  • リクエスト数/秒(1 秒間に処理できたリクエスト数)
  • データ転送量/秒

計測結果

ポストくん API

Running 10s test @ https://postcode.teraren.com/postcodes/1600023.json
  2 threads and 10 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    17.38ms    3.50ms  56.86ms   81.09%
    Req/Sec   287.60     22.71   343.00     79.00%
  5757 requests in 10.06s, 11.29MB read
Requests/sec:    572.01
Transfer/sec:      1.12MB

ZipCloud API

Running 10s test @ https://zipcloud.ibsnet.co.jp/api/search?zipcode=1600023
  2 threads and 10 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   217.51ms   21.91ms 349.86ms   94.29%
    Req/Sec    22.67      8.09    40.00     78.01%
  455 requests in 10.10s, 101.51KB read
Non-2xx or 3xx responses: 404
Requests/sec:     45.07
Transfer/sec:     10.05KB

ttskch/jp-postal-code-api

❯ wrk 'https://jp-postal-code-api.ttskch.com/api/v1/1600023.json'
Running 10s test @ https://jp-postal-code-api.ttskch.com/api/v1/1600023.json
  2 threads and 10 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    21.87ms   13.82ms 241.38ms   97.74%
    Req/Sec   239.94     24.27   272.00     87.00%
  4801 requests in 10.05s, 7.99MB read
Requests/sec:    477.52
Transfer/sec:    813.56KB

結果比較

指標 ポストくん API ZipCloud API ttskch/jp-postal-code-api
平均レイテンシー 17.38ms 217.51ms 21.87ms
リクエスト数/秒 572.01 45.07 477.52
データ転送量/秒 1.12MB 10.05KB 813.56KB
非2xx/3xxレスポンス数 0 404 0

考察

パフォーマンスの違い

計測結果から、ポストくん API が最も高速であることが分かります。ttskch/jp-postal-code-api は 2 番目に高いパフォーマンスを示し、ZipCloud API は最も遅い結果となりました。

  • 平均レイテンシー: ポストくん API が最も短く、次いで ttskch/jp-postal-code-api、ZipCloud API の順です。ZipCloud API は他の 2 つの API と比較して約 10 倍以上のレイテンシーがあります。

  • リクエスト数/秒: ポストくん API が最も多く、ttskch/jp-postal-code-api がそれに続きます。ZipCloud API は他の 2 つの API と比較して著しく少ないリクエスト処理能力を示しています。

  • データ転送量/秒: ポストくん API が最も多く、次いで ttskch/jp-postal-code-api、ZipCloud API の順です。

  • エラーレスポンス: ポストくん API と ttskch/jp-postal-code-api は非 2xx/3xx レスポンスがなく、安定性が高いことが示されています。一方、ZipCloud API ではエラーが発生しており、信頼性に課題があることが示唆されます。

利用シナリオ別の選択肢

  • 高速性と安定性が最優先の場合: ポストくん API が最適です。
  • 高速性は重要だが、ポストくん APIほどの極限的なパフォーマンスが不要な場合: ttskch/jp-postal-code-api も良い選択肢となります。
  • 低頻度のアクセスや簡易な利用の場合: ZipCloud API も検討可能ですが、エラー処理の実装が必要です。

アクセスブロックに関して

ポストくんでは Cloudflare の CDN によるキャッシングを行っており、不正アクセス対策も行われています。今回の 10 秒間で 6000 リクエスト近いリクエストを送っても不正判定はされませんでした。
ZipCloud では大量アクセスに対して、rate limit が早期に掛かる可能性があります。

結論

今回の計測では、ポストくん API が最も高いパフォーマンスを示し、ttskch/jp-postal-code-api がそれに続く結果となりました。両 API とも安定性も高く、高速性や信頼性を重視するアプリケーションに適しています。

特に、極限的な高速性が求められる場合はポストくん API が、それほどの極限的なパフォーマンスが不要な場合は ttskch/jp-postal-code-api も良い選択肢となるでしょう。ZipCloud API は、パフォーマンスと安定性の面で改善の余地があります。

API の選択に当たっては、これらのパフォーマンス指標に加えて、API の機能、利用制限、料金体系なども考慮に入れる必要があります。アプリケーションの要件に最も適した API を選択することが重要です。

Discussion