🎠

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

2024/12/11に公開

はじめに

ベンチマークと高速化が大好きな @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