API(Application Programming Interface)呼び出しとは、外部のサービスやデータにプログラムからアクセスするための仕組みです。PythonでAIサービスや各種Webサービスを利用する際、APIは欠かせない技術です。requestsライブラリを使えば、数行のコードでAPIの呼び出しと結果の処理ができます。
HTTPメソッドの基礎
Section titled “HTTPメソッドの基礎”APIはHTTPプロトコル(Webで使われる通信規格)を通じてデータをやり取りします。主なHTTPメソッドを覚えておきましょう。
| メソッド | 用途 | 例 |
|---|---|---|
| GET | データを取得する | ユーザー情報を取得、記事一覧を取得 |
| POST | 新しいデータを作成する | メッセージを送信、ファイルをアップロード |
| PUT | データを更新する(全体) | プロフィール情報を更新 |
| PATCH | データを一部更新する | 名前だけを変更 |
| DELETE | データを削除する | 投稿を削除 |
AIサービスのAPI(Claude、OpenAIなど)への呼び出しは、ほとんどの場合 POST を使います。
requestsライブラリのインストール
Section titled “requestsライブラリのインストール”pip install requestsインストール確認:
import requests
print(requests.__version__) # 例: 2.31.0GETリクエスト:データを取得する
Section titled “GETリクエスト:データを取得する”JSONPlaceholder は学習用の無料APIです。実際にリクエストを送って試せます。
import requests
# GETリクエストを送る
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
# HTTPステータスコードを確認する
print(response.status_code) # 200(成功)
# JSONデータとして受け取る
data = response.json()
print(data)
# {
# 'userId': 1,
# 'id': 1,
# 'title': 'sunt aut facere repellat...',
# 'body': 'quia et suscipit...'
# }
# 特定のフィールドを取り出す
print(data["title"])
print(data["body"])クエリパラメータの付け方
Section titled “クエリパラメータの付け方”URLに ?key=value の形式でパラメータを付けると、検索や絞り込みができます。requestsでは params 引数を使います。
import requests
# 手動でURLを組み立てる代わりに params を使う
# 実際のURL: https://jsonplaceholder.typicode.com/posts?userId=1
response = requests.get(
"https://jsonplaceholder.typicode.com/posts",
params={"userId": 1}
)
posts = response.json()
print(f"取得した投稿数: {len(posts)}")
for post in posts[:3]: # 最初の3件を表示
print(f" - {post['title'][:40]}...")POSTリクエスト:データを送信する
Section titled “POSTリクエスト:データを送信する”import requests
# 送信するデータを辞書で定義する
new_post = {
"title": "Python API入門",
"body": "requestsライブラリを使ってAPIを呼び出す方法を学びます",
"userId": 1
}
# POSTリクエストを送る(jsonパラメータを使うとContent-Typeが自動設定される)
response = requests.post(
"https://jsonplaceholder.typicode.com/posts",
json=new_post
)
print(response.status_code) # 201(作成成功)
created = response.json()
print(f"作成されたID: {created['id']}")json= と data= の違い
Section titled “json= と data= の違い”| 引数 | Content-Type | 用途 |
|---|---|---|
json=dict | application/json | REST API(AIサービスなど)への送信 |
data=dict | application/x-www-form-urlencoded | HTMLフォームと同じ形式 |
AI APIはほぼ全て json= を使います。
エラーハンドリング
Section titled “エラーハンドリング”APIは常に成功するとは限りません。エラーへの対処を実装しましょう。
HTTPステータスコードの確認
Section titled “HTTPステータスコードの確認”import requests
response = requests.get("https://jsonplaceholder.typicode.com/posts/999")
if response.status_code == 200:
print("成功:", response.json())
elif response.status_code == 404:
print("見つかりません(404)")
elif response.status_code == 429:
print("リクエスト制限に達しました(429)。しばらく待ってください。")
elif response.status_code >= 500:
print(f"サーバーエラー({response.status_code})")
else:
print(f"エラー: {response.status_code}")raise_for_status() を使う
Section titled “raise_for_status() を使う”より簡潔なエラーチェック方法:
import requests
try:
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
response.raise_for_status() # 4xx/5xxのとき例外を発生させる
data = response.json()
print(data["title"])
except requests.exceptions.HTTPError as e:
print(f"HTTPエラー: {e}")
except requests.exceptions.ConnectionError:
print("ネットワーク接続エラー。インターネット接続を確認してください。")
except requests.exceptions.Timeout:
print("タイムアウト。サーバーの応答に時間がかかりすぎています。")
except requests.exceptions.RequestException as e:
print(f"予期しないエラー: {e}")タイムアウトの設定
Section titled “タイムアウトの設定”import requests
# timeout=(接続タイムアウト秒, 読み取りタイムアウト秒)
response = requests.get(
"https://jsonplaceholder.typicode.com/posts/1",
timeout=(5, 30) # 接続5秒、読み取り30秒で失敗とみなす
)タイムアウトを設定しないと、サーバーが応答しない場合にプログラムが永遠に待ち続けます。必ず設定してください。
ヘッダーと認証
Section titled “ヘッダーと認証”多くのAPIは認証が必要です。APIキーをリクエストヘッダーに含めます。
import requests
import os
# APIキーは環境変数から読み込む(コードに直接書かない)
api_key = os.environ.get("MY_API_KEY")
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
"User-Agent": "MyApp/1.0" # アプリの識別情報(任意)
}
response = requests.get(
"https://api.example.com/data",
headers=headers,
timeout=10
)APIキーを "Bearer " の後に付ける形式(Bearer認証)は、AI APIを含む多くのREST APIで使われる標準的な方式です。
実践例:公開APIを呼び出してデータを表示する
Section titled “実践例:公開APIを呼び出してデータを表示する”実際に動く例として、GitHubの公開APIを使ってリポジトリ情報を取得します。
import requests
import json
def get_github_repo_info(owner: str, repo: str) -> dict | None:
"""GitHubリポジトリの基本情報を取得する"""
url = f"https://api.github.com/repos/{owner}/{repo}"
headers = {
"Accept": "application/vnd.github.v3+json",
"User-Agent": "python-api-tutorial"
}
try:
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
return response.json()
except requests.exceptions.HTTPError as e:
if response.status_code == 404:
print(f"リポジトリが見つかりません: {owner}/{repo}")
else:
print(f"HTTPエラー: {e}")
return None
except requests.exceptions.RequestException as e:
print(f"通信エラー: {e}")
return None
def display_repo_info(info: dict) -> None:
"""リポジトリ情報を見やすく表示する"""
print(f"リポジトリ: {info['full_name']}")
print(f"説明: {info.get('description', '(説明なし)')}")
print(f"スター数: {info['stargazers_count']:,}")
print(f"フォーク数: {info['forks_count']:,}")
print(f"主な言語: {info.get('language', '不明')}")
print(f"最終更新: {info['updated_at'][:10]}")
# 実行
info = get_github_repo_info("anthropics", "anthropic-sdk-python")
if info:
display_repo_info(info)実行結果の例:
リポジトリ: anthropics/anthropic-sdk-python
説明: The official Python library for the Anthropic API
スター数: 4,123
フォーク数: 456
主な言語: Python
最終更新: 2026-05-10セッションを使って効率化する
Section titled “セッションを使って効率化する”同じホストへ複数回リクエストする場合、requests.Session を使うとTCPコネクションを再利用でき、パフォーマンスが向上します。
import requests
# セッションを作成する
with requests.Session() as session:
# セッション共通のヘッダーを設定する
session.headers.update({
"Authorization": "Bearer my-api-key",
"Content-Type": "application/json"
})
# 同じセッションで複数のリクエストを送る
response1 = session.get("https://api.example.com/users/1")
response2 = session.get("https://api.example.com/users/2")
response3 = session.post("https://api.example.com/messages", json={"text": "hello"})requests.get()でデータを取得し、.json()でPythonの辞書として扱うrequests.post(url, json=data)でデータを送信するraise_for_status()とtry/exceptでエラーを適切に処理する- APIキーは環境変数から読み込み、コードに直接書かない
timeoutを必ず設定する- 同じホストへの連続リクエストには
Sessionを使う
次のステップとして、PythonでのJSON処理でAPIレスポンスのより高度な処理方法を学び、Python × AI SDK実践でAI APIの呼び出しに進みましょう。
よくある質問
Section titled “よくある質問”Q: requestsとhttplibやurllib.requestの違いは何ですか?
A: urllib.request はPython標準ライブラリで追加インストール不要ですが、記述が冗長です。requests はサードパーティライブラリですが、シンプルで直感的なAPIを提供します。実務ではrequests(または非同期のhttpx)が広く使われます。
Q: APIのレートリミット(制限)にかかったときはどうすればいいですか?
A: ステータスコード429が返ります。Retry-After ヘッダーで待機時間が指定されることがあります。time.sleep() で待機してから再試行するか、tenacityのような再試行ライブラリを使います。
Q: 非同期でAPIを呼び出したい場合はどうすればいいですか?
A: asyncio と httpx ライブラリを組み合わせます。複数のAPIを並行して呼び出す場合や、FastAPIのような非同期フレームワークと組み合わせる場合に有効です。
Q: HTTPS通信の証明書エラーが出る場合は?
A: 社内のプロキシやカスタムCA証明書が必要な場合があります。requests.get(url, verify="/path/to/ca-bundle.crt") で証明書を指定するか、IT部門に相談してください。verify=False は本番環境では絶対に使わないでください。
このページの外部仕様・背景情報は、参考文献を参照してください。[1][2]
- Python Software Foundation, The Python Tutorial
- OpenAI, OpenAI API documentation