質問: 最近WebAPIの勉強を始めた者です。 PHPでWebAPIを利用したWEBサービスを作成したいと思っています。 その中で、複数件のレコードを取得したいとします。仮に1万件分とします。 レートリミットが指定してある場合は、当然その回数内で行うことになると思います。 1回の使用で取得できる件数が100件だとして、100回ループすればすべて取得できますが、この場合、 間にウェイト処理などを挟まないといけないのでしょうか? WebAPIを利用したとしても、サーバへ負荷を与えた(DOS攻撃)と見なされる可能性があるのか心配しております。 sleepしている間、ユーザは完全に待ち状態になるので、できれば、あまりウェイト処理は挟みたくはないですが・・・。 図書館のWebスクレイピングでの逮捕の事例を知り不安になり、ご質問させていただきました。 もしウェイトが必要な場合は、何秒くらいが適切なのでしょうか? ご回答よろしくお願いします。
回答: 一般的にそういった外部公開されているAPIには回数制限が設けられていると思います。仕様書をよく確認してください。TwitterAPIであれば15分間で◯回までといった具合に決められており、それ以上のアクセスはブロックされてAPIの呼び出し失敗となります。 あなたがどこのWebAPIにアクセスしようとしているかはわかりませんが、その仕様書に特に回数制限について書いていないのであれば相手の不備であると考えられます。相手のサーバの規模、サービスの強度等を考えて、常識の範囲内でアクセスすることをおすすめします。 追記 リクエスト間の秒数に関して記載がないのであれば、そのサーバは「想定ユーザ数×リクエスト数÷時間」の処理能力を有していると判断してよいでしょう。特にsleepについては考えなくてよい規模である、そもそも1リクエストごとにサーバ側で待たされている、こちらで1秒sleepを入れておけば怒られる筋合いはない、程度に私は捉えています。ただし、相手のサービスが例えば「そもそも高負荷がかかることを想定していないような弱小サービス」だったとすると、5秒くらい待ってあげたほうがよいでしょう。情報で売っているような企業のサービスであればそのへんの負荷計算をしているでしょうが、「とりあえずAPI公開してみた」ようなもの(例えば公的機関とか)には要注意です。