エージェント開発者のためのREST API基礎
HTTPメソッド、ステータスコード、ヘッダー、JSONのリクエスト/レスポンス形式を学びます。
「エージェント開発者のためのREST API基礎」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
HTTPリクエストとは
外部サービスに接続するすべてのエージェントは、ウェブの言語であるHTTPを使用します。HTTPリクエストには、3つの主要な要素があります。メソッド、URL、そして任意のヘッダーとボディです。
メソッドはサーバーに何をしたいかを伝える動詞、URLはリソースのアドレスだと考えてください。
import requests
# A simple GET request to a public API
response = requests.get('https://api.example.com/users')
print(response.status_code) # 200
print(response.text) # raw JSON stringGET — データの取得
GETはサーバーからデータを取得します。何も変更してはいけません。エージェントはGETを使って、ユーザープロフィールの読み取り、タスクリストの取得、設定データの取得などを行います。
params引数を使い、URLのクエリ文字列としてパラメーターを渡せます。
import requests
# Fetch users filtered by role
params = {'role': 'admin', 'page': 1, 'limit': 10}
response = requests.get(
'https://api.example.com/users',
params=params
)
# URL becomes: /users?role=admin&page=1&limit=10
data = response.json()
print(data['users'])POST — リソースの作成
POSTは、新しいリソースを作成するためにサーバーへデータを送信します。エージェントはPOSTを使って、タスクの送信、メッセージの送信、アクションの実行などを行います。データはJSON形式のリクエストボディに入れます。
常にContent-Type: application/jsonヘッダーを設定してください。ほとんどのAPIで必要です。
import requests
import json
payload = {
'title': 'Research competitors',
'assignee': 'agent-001',
'priority': 'high'
}
response = requests.post(
'https://api.example.com/tasks',
json=payload # sets Content-Type automatically
)
print(response.status_code) # 201 Created
new_task = response.json()
print('Created task ID:', new_task['id'])PUTとPATCH — データの更新
PUTは、リソース全体を新しいデータで置き換えます。PATCHは、特定のフィールドだけを更新します。エージェントは、更新後のオブジェクト全体を持っている場合にPUTを使い、タスクのステータス更新のような部分的な変更にはPATCHを使います。
import requests
task_id = '42'
# PATCH: only update the status field
response = requests.patch(
f'https://api.example.com/tasks/{task_id}',
json={'status': 'completed'}
)
print(response.status_code) # 200
# PUT: replace the whole task object
full_task = {
'title': 'Research competitors',
'assignee': 'agent-001',
'priority': 'low',
'status': 'completed'
}
response = requests.put(
f'https://api.example.com/tasks/{task_id}',
json=full_task
)
print(response.status_code) # 200DELETE — リソースの削除
DELETEは、サーバーからリソースを削除します。エージェントはDELETEを使って、一時データのクリーンアップ、処理済みタスクの削除、スケジュール済みジョブのキャンセルなどを行います。ほとんどのDELETEリクエストにはボディがありません。
削除が成功すると、通常は204 No Contentが返されます。レスポンスにボディはありません。
import requests
task_id = '42'
response = requests.delete(
f'https://api.example.com/tasks/{task_id}'
)
if response.status_code == 204:
print('Task deleted successfully')
elif response.status_code == 404:
print('Task not found — already deleted?')
else:
print('Unexpected status:', response.status_code)ステータスコード:2xx 成功
ステータスコードは、リクエストが成功したか失敗したかをエージェントに伝えます。2xxの範囲は成功を意味します。
200 OK— GET/PUT/PATCHがデータを返した201 Created— POSTによって新しいリソースが作成された204 No Content— DELETEが成功し、ボディは返されなかった
レスポンスボディを処理する前に、必ずステータスコードを確認してください。
import requests
response = requests.post(
'https://api.example.com/tasks',
json={'title': 'New task'}
)
if response.status_code == 201:
task = response.json()
print('Created:', task['id'])
elif response.status_code == 200:
print('Updated existing resource')
else:
print('Unexpected code:', response.status_code)ステータスコード:4xx クライアントエラー
4xxエラーは、エージェントが不正なリクエストを送信したことを意味します。よくあるものは次のとおりです。
400 Bad Request— JSONが無効、または必須フィールドがない401 Unauthorized— APIキーがない、または無効404 Not Found— リソースが存在しない429 Too Many Requests— レート制限を超えた
この場合、エージェントはリクエストを修正する必要があり、無条件に再試行してはいけません。
import requests
response = requests.get(
'https://api.example.com/tasks/9999',
headers={'Authorization': 'Bearer YOUR_KEY'}
)
if response.status_code == 401:
print('AUTH ERROR: Check your API key')
elif response.status_code == 404:
print('Task not found')
elif response.status_code == 429:
retry_after = response.headers.get('Retry-After', 60)
print(f'Rate limited. Wait {retry_after}s')
elif response.status_code == 400:
print('Bad request:', response.json().get('error'))ステータスコード:5xx サーバーエラー
5xxエラーは、サーバー側で問題が発生したことを意味します。エージェントに問題はありません。よくあるものは次のとおりです。
500 Internal Server Error— サーバーのバグまたはクラッシュ502 Bad Gateway— 上流サービスの障害503 Service Unavailable— サーバーが過負荷、または停止している
これらは、短時間待ってから安全に再試行できます。
import requests
import time
def get_with_retry(url, headers, max_retries=3):
for attempt in range(max_retries):
response = requests.get(url, headers=headers)
if response.status_code < 500:
return response # success or client error
wait = 2 ** attempt
print(f'Server error {response.status_code}, retrying in {wait}s...')
time.sleep(wait)
return response # return last response after retriesリクエストヘッダー
ヘッダーは、すべてのリクエストにメタデータを付加します。エージェントにとって特に重要なものは次のとおりです。
Content-Type: application/json— ボディがJSONであることをサーバーに伝えるAuthorization: Bearer TOKEN— リクエストを認証するAccept: application/json— JSONの返却を期待していることをサーバーに伝えるUser-Agent— クライアントを識別する(一部のAPIでは必須)
import requests
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk-proj-abc123xyz',
'Accept': 'application/json',
'User-Agent': 'MyAgent/1.0'
}
response = requests.post(
'https://api.example.com/analyze',
headers=headers,
json={'text': 'Analyze this document'}
)
print(response.json())JSONリクエストとレスポンスのボディ
現在のほとんどのAPIでは、データのやり取りにJSONを使用します。送信時はrequestsでjson=payloadを使ってください。これにより、シリアライズとヘッダー設定が自動的に行われます。受信時はresponse.json()を呼び出して、ボディをPythonのdictに解析します。
値を参照する前に、期待するキーが存在することを必ず検証してください。
import requests
# Send JSON body
response = requests.post(
'https://api.example.com/summarize',
json={
'content': 'Long article text here...',
'max_length': 150,
'format': 'bullet_points'
}
)
# Parse JSON response
result = response.json()
# Always check keys exist
summary = result.get('summary', 'No summary returned')
tokens_used = result.get('usage', {}).get('total_tokens', 0)
print('Summary:', summary)
print('Tokens used:', tokens_used)すべてを組み合わせる
適切に記述されたエージェントは、メソッドの選択、適切なヘッダーの設定、ステータスコードの確認、JSONの解析を、整理されたヘルパー関数でAPI呼び出しにまとめます。これにより、すべてのAPI操作が一貫し、デバッグしやすくなります。
Sessionオブジェクトを使うと、接続を再利用し、複数のリクエスト間でヘッダーを共有できます。
import requests
class APIClient:
def __init__(self, base_url, api_key):
self.base_url = base_url
self.session = requests.Session()
self.session.headers.update({
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json',
'Accept': 'application/json'
})
def get(self, path, params=None):
r = self.session.get(f'{self.base_url}{path}', params=params)
r.raise_for_status()
return r.json()
def post(self, path, payload):
r = self.session.post(f'{self.base_url}{path}', json=payload)
r.raise_for_status()
return r.json()
# Usage
client = APIClient('https://api.example.com', 'sk-proj-abc123')
tasks = client.get('/tasks', params={'status': 'open'})
new_task = client.post('/tasks', {'title': 'Write report'})クイックチェック:HTTPメソッド
HTTPメソッドとステータスコードについての理解度を確認しましょう。
HTTPの基礎のまとめ
これで、すべてのエージェントが利用するHTTPの基礎を理解できました。
- GETは取得、POSTは作成、PUT/PATCHは更新、DELETEは削除を行う
- 2xx = 成功、4xx = エージェント側の問題、5xx = サーバー側の問題
- ヘッダーには認証情報(
Authorization: Bearer)と形式(Content-Type: application/json)を設定する response.json()でボディを解析し、.get()でフィールドに安全にアクセスするSessionオブジェクトを使うと、リクエスト間でヘッダーと接続を共有できる
これらの基礎が身に付けば、どのREST APIにも自信を持ってエージェントを接続できます。
よくある質問
「エージェント開発者のためのREST API基礎」レッスンは無料ですか?
はい。「エージェント開発者のためのREST API基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「エージェント開発者のためのREST API基礎」で何を学びますか?
HTTPメソッド、ステータスコード、ヘッダー、JSONのリクエスト/レスポンス形式を学びます。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「エージェント開発者のためのREST API基礎」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- エージェント開発者のためのREST API基礎
- 認証:API KeysとOAuth
- APIレスポンスとエラーの処理
- レート制限とリトライロジック