はじめに
Python を使用して API リクエストを行う際、アプリケーションの信頼性はネットワークの問題やサーバーエラーによって挑戦されることがあります。本記事では、urllib3
と requests
ライブラリを組み合わせて、強力な Retry Request Util を作成する方法について掘り下げていきます。リトライメカニズムの重要性とその Python アプリケーションへのスムーズな統合に焦点を当てましょう。
API リクエストにおけるリトライの必要性の理解
API 通信の一般的な問題
API 通信はさまざまな課題にさらされており、ネットワークのちぐはぐさからサーバーのダウンタイムまで様々です。これらの問題はデータのアプリケーションと外部サービスの間の流れを妨げ、トランザクションの不完全さや予期せぬエラーを引き起こす可能性があります。
ネットワークエラーがアプリケーション信頼性に与える影響
ユーザーがシームレスなエクスペリエンスを要求する現代において、ネットワークエラーはアプリケーションの信頼性に対して重大な脅威となります。一時的なネットワークの問題が原因で重要な API コールが失敗すると想像してみてください。堅牢なリトライメカニズムは、そのようなトラブルがアプリケーション全体の機能に悪影響を与えないようにします。
適切なライブラリの選択: urllib3 と requests
urllib3 と requests ライブラリの紹介
Retry Request Util を構築するためのツールについて探る前に、手元にあるツールについて知っておきましょう。urllib3
は HTTP リクエストのための強力な接続プーリングとスレッドセーフを提供し、requests
は HTTP リクエストの送信とレスポンスの処理を簡素化します。
ライブラリのインストール
Retry Request Util を作成する前に、必要なライブラリがインストールされていることを確認しましょう。以下のコマンドを実行して urllib3
と requests
をインストールします。
pip install urllib3
pip install requests
ライブラリのインポート
import urllib3
from urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
retry_request.py の作成
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
@contextlib.contextmanager
def request_session():
max_retries = Retry(total=3,
backoff_factor=1,
status_forcelist=[k for k in range(400, 600)])
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
}
s = requests.session()
try:
s.headers.update(headers)
s.mount("http://", HTTPAdapter(max_retries=max_retries))
s.mount("https://", HTTPAdapter(max_retries=max_retries))
yield s
finally:
s.close()
使用例
from retry_request import request_session
def main():
with request_session() as s:
r = s.get("http://example.com")
print(r.status_code)
print(r.text)
if __name__ == "__main__":
main()