Django プロジェクトに Swagger API ドキュメントを統合する実践ガイド

Swagger の概要

Swagger は、RESTful Web サービスの設計、構築、文書化、可視化を支援する包括的なフレームワークです。バックエンド開発時に自動生成される API ドキュメントをフロントエンド開発者に提供し、インターフェースの変更があればドキュメントも自動的に更新されます。

Swagger の主な利点

  • インタラクティブな API コンソールの生成
  • 開発者が API インターフェース情報を迅速に管理・確認可能

実装手順

  1. 必要なパッケージのインストール
  2. Swagger モジュールの追加
  3. settings.py でのアプリケーション登録
  4. メイン URL 設定の更新
  5. 開発サーバーの起動
  6. get_link エラーの対応
  7. staticfiles テンプレートタグエラーの修正
  8. 確認作業

前提条件

django-rest-framework(DRF)がインストールされていること。Swagger は DRF と連携して動作するため、事前に DRF 環境を整えておく必要があります。

パッケージインストール

pip install django-rest-swagger

settings.py の設定

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'rest_framework_swagger',  # Swagger ドキュメント自動生成
]

URL 設定(urls.py)

from django.urls import path

# DRF のスキーマビュー取得関数をインポート
from rest_framework.schemas import get_schema_view

# Swagger のレンダラークラスをインポート
from rest_framework_swagger.renderers import SwaggerUIRenderer, OpenAPIRenderer

# get_schema_view 関数でスキーマビューを生成
schema_view = get_schema_view(
    title='API',
    renderer_classes=[SwaggerUIRenderer, OpenAPIRenderer]
)

# ドキュメント用のURLパターンを設定
urlpatterns = [
    path('docs/', schema_view, name="swagger")
]

インターフェースの説明

ビュークラス内にコメントとして記述された内容が、API ドキュメントの説明文として表示されます。

動作確認

python manage.py runserver

ブラウザで http://127.0.0.1:8001/docs/ にアクセス(ポートは実際の設定に応じて変更)

エラー対応

エラー1: 'AutoSchema' object has no attribute 'get_link'

解決策:settings.py に DRF のスキーマクラス設定を追加

REST_FRAMEWORK = {
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
}

エラー2: 'staticfiles' is not a registered tag library

解決策:対象ファイルのテンプレートタグを修正

ファイルパス: env/lib/python3.10/site-packages/rest_framework_swagger/templates/rest_framework_swagger/index.html

修正内容:{% load staticfiles %}{% load static %} に変更

修正後、ブラウザをリフレッシュして動作を再確認します。

タグ: Django Swagger RESTful API Django-REST-Framework API ドキュメント自動生成

6月26日 22:12 投稿