RESTとは
Representational State Transfer の略。HTTPメソッドとURLで「資源(リソース)」を操作する設計スタイルです。
REST APIとは何か・APIサーバーの建て方・疎通確認まで、アニメーション図解と仮想コンソール演習で学べます。
▶ クライアント ↔ サーバー リクエスト/レスポンス フロー(アニメーション)
Representational State Transfer の略。HTTPメソッドとURLで「資源(リソース)」を操作する設計スタイルです。
サーバーはリクエスト間で状態を保持しません。認証情報は毎回送信します(トークン等)。
/api/users/123 のようにリソースをURLで表現。動詞(get_user等)は使いません。
GET=取得, POST=作成, PUT/PATCH=更新, DELETE=削除。HTTPメソッドで操作を表します。
| メソッド | 用途 | URL例 | 安全性 |
|---|---|---|---|
| GET | リソースの取得 | GET /api/users/ |
冪等・安全 |
| POST | リソースの新規作成 | POST /api/users/ |
変更あり |
| PUT | リソースの全体更新 | PUT /api/users/1/ |
変更あり |
| PATCH | リソースの部分更新 | PATCH /api/users/1/ |
変更あり |
| DELETE | リソースの削除 | DELETE /api/users/1/ |
変更あり |
▶ Flask APIアーキテクチャ フロー(アニメーション)
Pythonの軽量WebフレームワークFlaskを導入します。
pip install flask
Flaskアプリケーションインスタンスを作成します。
from flask import Flask, jsonify, request app = Flask(__name__)
GETリクエストに対してJSONを返すエンドポイントを定義します。
@app.route('/api/hello', methods=['GET'])
def hello():
return jsonify({'message': 'Hello, API!'})
ポート5000でAPIサーバーを起動します。
flask run --host=0.0.0.0 --port=5000
▶ DRF パイプライン フロー(アニメーション)
Django REST Frameworkを導入し、settings.pyのINSTALLED_APPSに追加します。
pip install djangorestframework
APIで操作するリソースをDjangoモデルとして定義します。
class Task(models.Model):
title = models.CharField(max_length=200)
done = models.BooleanField(default=False)
モデルとJSON間の変換を担当するシリアライザを作成します。
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = '__all__'
ViewSetでCRUD全操作を自動生成し、URLRouterで接続します。
class TaskViewSet(viewsets.ModelViewSet):
queryset = Task.objects.all()
serializer_class = TaskSerializer
router = DefaultRouter()
router.register('tasks', TaskViewSet)
▶ 疎通確認ツール フロー(アニメーション)
最も基本的なAPI疎通ツール。ターミナルから直接HTTPリクエストを送信できます。
curl -X GET http://localhost:5000/api/hello
GUIでリクエストを組み立て、レスポンスを可視化できるAPI開発ツールです。
コレクション機能でテストを保存・共有
スクリプトで自動テストを書く場合に最適。CI/CDにも組み込めます。
import requests
r = requests.get('http://localhost:5000/api/hello')
print(r.json())
Networkタブでリクエスト/レスポンスを確認。GETリクエストはURLバーから直接可能。
F12 → Network → XHR フィルタ
| コード | 意味 |
|---|---|
| 200 OK | 成功。リソースを返却。 |
| 201 Created | 作成成功。新リソースのURIをLocationヘッダに含む。 |
| 204 No Content | 成功だがレスポンスボディなし(DELETE等)。 |
| 400 Bad Request | リクエスト不正。バリデーションエラー等。 |
| 401 Unauthorized | 認証失敗。トークン無効/期限切れ。 |
| 403 Forbidden | 認証済みだが権限不足。 |
| 404 Not Found | リソースが存在しない。 |
| 429 Too Many Requests | レートリミット超過。 |
| 500 Internal Server Error | サーバー内部エラー。 |
| エラー | 原因 | 対処法 |
|---|---|---|
| Connection refused | サーバーが起動していない or ポート番号が違う | サーバープロセス確認、ポート番号確認 |
| 404 Not Found | URLパスが間違っている | ルーティング定義とURLの一致を確認 |
| 405 Method Not Allowed | HTTPメソッドが許可されていない | エンドポイントの許可メソッドを確認 |
| 500 Internal Server Error | サーバー側のコードエラー | サーバーログを確認、デバッグモードで詳細表示 |
| CORS error | ブラウザのクロスオリジン制限 | flask-cors等のCORS対応ミドルウェアを導入 |
演習を選び、次のコマンド実行を押すと疑似ログが流れます。完了後に成功判定と改善ポイントを確認してください。