無料の郵便番号検索APIのレスポンススピード比較
はじめに
ベンチマークと高速化が大好きな @matsubokkuri です。
郵便番号検索APIは、住所情報を取得する際に頻繁に利用される重要なツールです。
本記事では、3つの郵便番号検索APIのレスポンススピードを比較し、それぞれのパフォーマンスについて考察します。
計測概要
使用したツール
- wrk: 高負荷テストツールを使用して、各APIのレスポンススピードを計測しました。
計測条件
- テスト対象のURL:
- ポストくん API: https://postcode.teraren.com/postcodes/1600023.json
- ZipCloud API: https://zipcloud.ibsnet.co.jp/api/search?zipcode=1600023
- ttskch/jp-postal-code-api: https://jp-postal-code-api.ttskch.com/api/v1/1600023.json
- テスト時間:10秒
- スレッド数:2
- 接続数:10
テスト内容
各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