REST API 実技ガイド

REST APIとは何か・APIサーバーの建て方・疎通確認まで、アニメーション図解と仮想コンソール演習で学べます。

待機中

REST APIとは

▶ クライアント ↔ サーバー リクエスト/レスポンス フロー(アニメーション)

クライアント Browser / App APIサーバー Flask / Django GET /api/users/ → リクエスト ← レスポンス 200 OK { "users": [...] } GET POST PUT DELETE

RESTとは

Representational State Transfer の略。HTTPメソッドとURLで「資源(リソース)」を操作する設計スタイルです。

ステートレス

サーバーはリクエスト間で状態を保持しません。認証情報は毎回送信します(トークン等)。

リソース指向URL

/api/users/123 のようにリソースをURLで表現。動詞(get_user等)は使いません。

統一インターフェース

GET=取得, POST=作成, PUT/PATCH=更新, DELETE=削除。HTTPメソッドで操作を表します。

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/ 変更あり

APIサーバの建て方 (Flask)

▶ Flask APIアーキテクチャ フロー(アニメーション)

Browser Client Flask App app.py / routes Business Logic / Service Database SQLite / PostgreSQL
1

Flask インストール

Pythonの軽量WebフレームワークFlaskを導入します。

pip install flask
2

アプリケーション作成

Flaskアプリケーションインスタンスを作成します。

from flask import Flask, jsonify, request
app = Flask(__name__)
3

エンドポイント定義

GETリクエストに対してJSONを返すエンドポイントを定義します。

@app.route('/api/hello', methods=['GET'])
def hello():
    return jsonify({'message': 'Hello, API!'})
4

サーバー起動

ポート5000でAPIサーバーを起動します。

flask run --host=0.0.0.0 --port=5000

REST APIサーバの建て方(Django REST Framework)

▶ DRF パイプライン フロー(アニメーション)

HTTP Request URL Router DefaultRouter ViewSet list/create/update Serializer validate/convert Model DB ORM
1

DRF インストール

Django REST Frameworkを導入し、settings.pyのINSTALLED_APPSに追加します。

pip install djangorestframework
2

モデル定義

APIで操作するリソースをDjangoモデルとして定義します。

class Task(models.Model):
    title = models.CharField(max_length=200)
    done = models.BooleanField(default=False)
3

シリアライザ作成

モデルとJSON間の変換を担当するシリアライザを作成します。

class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model = Task
        fields = '__all__'
4

ViewSet & Router

ViewSetでCRUD全操作を自動生成し、URLRouterで接続します。

class TaskViewSet(viewsets.ModelViewSet):
    queryset = Task.objects.all()
    serializer_class = TaskSerializer

router = DefaultRouter()
router.register('tasks', TaskViewSet)

APIの疎通確認

▶ 疎通確認ツール フロー(アニメーション)

curl Postman requests Browser API Server :5000 / :8000 Response 200 / 201 / 404

curl (コマンドライン)

最も基本的なAPI疎通ツール。ターミナルから直接HTTPリクエストを送信できます。

curl -X GET http://localhost:5000/api/hello

Postman / Insomnia

GUIでリクエストを組み立て、レスポンスを可視化できるAPI開発ツールです。

コレクション機能でテストを保存・共有

Python requests

スクリプトで自動テストを書く場合に最適。CI/CDにも組み込めます。

import requests r = requests.get('http://localhost:5000/api/hello') print(r.json())

ブラウザ DevTools

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対応ミドルウェアを導入

仮想コンソール演習

演習を選び、次のコマンド実行を押すと疑似ログが流れます。完了後に成功判定と改善ポイントを確認してください。

この演習の目的

待機中

成功の判定基準

    改善・次のステップ