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

利用drf_yasg.openapi自动生成RESTfulAPI文档的简单示例

发布时间:2023-12-28 04:42:12

drf_yasg.openapi是基于Django Rest Framework(DRF)和OpenAPI规范的一个库,可用于自动生成RESTfulAPI文档。它提供了一个易于使用的API视图生成器,可以生成详细而全面的API文档。

在本文中,我将为您提供一个简单的示例来演示如何使用drf_yasg.openapi来自动生成RESTfulAPI文档,并提供一些常见的使用例子。

首先,我们需要安装drf-yasg库。您可以使用以下命令来安装它:

pip install drf-yasg

安装完成后,我们需要进行一些配置。首先,在您的Django项目的settings.py文件中,添加以下内容:

INSTALLED_APPS = [
    ...
    'django.contrib.staticfiles',  # 静态资源处理
    'drf_yasg',
    ...
]

STATIC_URL = '/static/'

接下来,我们需要创建一个名为swagger的urls.py文件,并添加以下内容:

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

schema_view = get_schema_view(
   openapi.Info(
      title="API文档",
      default_version='v1',
      description="这是一个示例API文档",
      terms_of_service="https://www.example.com/policies/terms/",
      contact=openapi.Contact(email="contact@example.com"),
      license=openapi.License(name="BSD License"),
   ),
   public=True,
)

urlpatterns = [
   path('swagger(<format>\.json|\.yaml)', schema_view.without_ui(cache_timeout=0), name='schema-json'),
   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'),
]

现在,我们可以通过访问/swagger/来查看自动生成的API文档。

下面,我将为您提供一些常见的使用例子。

1. 添加API文档注释

在您的DRF视图函数或类视图中,您可以使用注释来指定API的描述信息,参数说明等。例如:

from drf_yasg import openapi

class ExampleView(APIView):
    """
    这是一个示例视图
    """
    @swagger_auto_schema(
        operation_description="这是一个示例GET接口",
        responses={200: openapi.Response('成功')}
    )
    def get(self, request):
        """
        这是一个示例GET接口
        """
        ...

2. 指定请求参数

您可以使用swagger_auto_schema装饰器来指定请求参数。例如,您可以使用@swagger_auto_schema(query_serializer=YourSerializer)来指定查询参数的序列化器。

@swagger_auto_schema(query_serializer=YourSerializer)
def get(self, request):
    """
    这是一个示例GET接口
    """
    ...

3. 指定响应体

您可以使用@swagger_auto_schema(responses={status_code: Response(serializer)})来指定响应体的序列化器。

@swagger_auto_schema(responses={200: YourSerializer})
def get(self, request):
    """
    这是一个示例GET接口
    """
    ...

4. 使用文章模块开发API文档

from drf_yasg.utils import swagger_auto_schema
from rest_framework import generics, permissions, serializers

from .models import Article
from .serializers import ArticleSerializer


class ArticleList(generics.ListCreateAPIView):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]

    @swagger_auto_schema(responses={200: ArticleSerializer(many=True)})
    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    @swagger_auto_schema(request_body=ArticleSerializer)
    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)


class ArticleDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer
    permission_classes = [permissions.IsOwnerOrReadOnly]

    @swagger_auto_schema(responses={200: ArticleSerializer()})
    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

    @swagger_auto_schema(request_body=ArticleSerializer)
    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)

以上是使用drf_yasg.openapi自动生成RESTfulAPI文档的简单示例和使用例子。通过使用drf_yasg.openapi,我们可以轻松地生成全面且易于理解的API文档,从而提升API开发的效率和可维护性。