欢迎访问宙启技术站
智能推送

利用drf_yasg.openapi自动创建规整的API文档:实践指南

发布时间:2023-12-28 04:44:30

DRF_YASG(Django Rest Framework Yet Another Swagger Generator)是一个基于Django Rest Framework和Swagger UI的工具,可以自动生成规整的API文档。本文将向您介绍如何使用DRF_YASG来自动创建API文档,并且提供一些使用例子来帮助您更好地理解。

首先,您需要安装DRF_YASG。可以使用以下命令在您的虚拟环境中安装:

pip install drf_yasg

在您的Django项目中,您需要进行一些配置。首先,在您的settings.py文件中,将DRF_YASG添加到INSTALLED_APPS列表中:

INSTALLED_APPS = [
    ...
    'drf_yasg',
    ...
]

接下来,您需要在您的urls.py文件中配置DRF_YASG的路由。您可以按照以下方式进行配置:

from django.urls import path
from drf_yasg import openapi
from drf_yasg.views import get_schema_view

schema_view = get_schema_view(
    openapi.Info(
        title="API文档",
        default_version='v1',
    ),
    public=True,
)

urlpatterns = [
    ...
    path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
    path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
    ...
]

到此为止,您已经完成了DRF_YASG的配置。现在,您可以访问/swagger/来查看自动生成的API文档,或访问/redoc/来查看使用ReDoc生成的API文档。

下面是一些使用DRF_YASG的例子来帮助您更好地理解:

#### 1. 使用@swagger_auto_schema装饰器

您可以使用@swagger_auto_schema装饰器来为您的API视图函数自定义文档。例如:

from drf_yasg.utils import swagger_auto_schema

@swagger_auto_schema(
    operation_summary="获取所有用户",
    operation_description="这是一个获取所有用户的API接口",
    responses={200: UserSerializer(many=True)},
)
@api_view(['GET'])
def get_all_users(request):
    users = User.objects.all()
    serializer = UserSerializer(users, many=True)
    return Response(serializer.data)

这个例子中,我们用@swagger_auto_schema装饰器来自定义了获取所有用户的API接口的文档。其中operation_summary表示API接口的标题,operation_description表示API接口的描述,responses定义了API接口的响应。在这个例子中,API接口的响应为200状态码,并返回了一个用户对象的列表。

#### 2. 自定义文档中的请求和响应

您可以直接在视图函数中定义请求和响应的文档,而不是使用DRF_YASG自动生成的文档。例如:

from drf_yasg.openapi import Parameter, IN_QUERY, IN_BODY, IN_PATH, TYPE_STRING, TYPE_INTEGER

@swagger_auto_schema(
    operation_summary="获取用户详情",
    operation_description="这是一个获取用户详情的API接口",
    manual_parameters=[
        Parameter(name='user_id', in_=IN_QUERY, type=TYPE_INTEGER, description='用户ID'),
        Parameter(name='user_name', in_=IN_PATH, type=TYPE_STRING, description='用户名'),
    ],
    request_body=UserSerializer,
    responses={200: UserSerializer()},
)
@api_view(['GET'])
def get_user_detail(request, user_id):
    user = User.objects.get(id=user_id)
    serializer = UserSerializer(user)
    return Response(serializer.data)

这个例子中,我们手动定义了获取用户详情的API接口的文档。manual_parameters定义了API接口的请求参数,request_body定义了API接口的请求体。在这个例子中,请求参数包括user_iduser_name,请求体使用了UserSerializer来定义。响应使用了UserSerializer来定义,并且状态码为200。

#### 3. API分组和版本控制

您可以使用DRF_YASG来为API分组,并且为每个API都指定不同的版本。例如:

core_api = openapi.Schema(
    title='Core API',
    description='核心API',
    version='v1',
)

core_urlpatterns = [
    ...  # 核心API的URL配置
]

other_api = openapi.Schema(
    title='Other API',
    description='其他API',
    version='v1',
)

other_api_urlpatterns = [
    ...  # 其他API的URL配置
]

urlpatterns = [
    ...
    path('core/api/', include((core_urlpatterns, 'core'), namespace='core-api')),
    path('other/api/', include((other_api_urlpatterns, 'other'), namespace='other-api')),
    ...
]

在这个例子中,我们为核心API和其他API分别定义了不同的文档。通过在URL配置中指定不同的命名空间,我们可以为每个API都生成不同的文档。

这些只是DRF_YASG的一些使用例子,您可以根据您的具体需求进行更多的自定义。希望本文能够帮助您使用DRF_YASG自动创建规整的API文档,并能够更好地理解其使用方式。