别再手动管理接口文档了

别再手动维护YApi了!IDEA装上EasyYapi插件,SpringBoot接口文档自动同步(附完整配置流程) 本文介绍如何通过IDEA的EasyYapi插件实现SpringBoot接口文档自动同步到YApi,告别手动维护的繁琐流程。详细讲解插件安装、配置、代码注解优化及自动化工作流集成,帮助开发者提升团队协作效率,确保文档与代码实时同步。 阅读详情

大多数情况下,开发的接口都不是给开发这个接口的人用的,所以如果没有接口文档,别人就无法有哪些接口可以调用,即使知道了接口的 URL,也很难知道接口需要哪些参数,即使知道了这些参数,也可能无法理解这些参数的含义。因此接口文档应该是项目必不可少的配置。

编写接口文档有很多种方式,最为简单直接的方式就是打开一个记事本或者 word 文档,将接口的详细信息和用法写下来,别人就可以参考这个文档来调用接口。这样做虽然简单,但弊端也很明显:一是需要写大量的描述文字,非常枯燥,但其实这些信息在代码中已有体现,有点像是使用自然语言又把代码写了一遍;二是一旦接口有了更新,就必须手动同步更新接口文档,开发人员很容易搞忘这件事,导致接口文档的内容和接口的实际功能不一致。

 

因为很多接口的信息其实在代码中已有体现,人们自然而然就想到能否直接从写好的代码中自动提取相关信息来生成文档,这样改了代码,接口文档也会自动更新,上面说的两个问题就都可以解决了。

当然写接口文档不是搞文学创作,为了直接从写好的代码中自动提取信息来生成文档,就必须要有一套标准的文档格式,否则工具无法知道要从代码中提取出哪些信息,信息提取之后,也不知道该如何组织这些信息。

经过大家的努力,现在已经有了很多成熟的接口文档标准和生成工具,其中 OpenAPI Specification 就是一个被广泛接收和使用的标准,我们博客接口使用的文档自动化工具,也会基于 OpenAPI 标准从代码中提取文档信息,然后组织为 OpenAPI 的标准格式。

小贴士:

大家更为熟悉的,和 OpenAPI 相关的一个名词是 swagger。Swagger 提供一系列免费开源的 OpenAPI 相关的工具,他们背后的公司是 SMARTBEAR,号称 code quality tools 开发行业的领导者。

OpenAPI 介绍

接口文档不是文学作品,它所需要的内容基本都是固定的。例如对一个 RESTful 风格的接口来说,只需要知道以下这些关键的信息就足够完成对它的调用了。反过来,这些信息也就可以定义一个完整的 RESTful 风格的接口:

  • 请求的 HTTP 方法和 URL。
  • 接收的参数(包括 URL 中的路径参数、查询参数;HTTP 请求头的参数;HTTP 请求体等参数)。
  • 接口返回的内容。

OpenAPI 对以上信息进行了标准化,从而提出了 OpenAPI specification,只要文档内容符合这个标准,OpenAPI 工具就可以对它进行处理,例如可视化文档工具就可以读取文档内容生成 HTML 格式的文档。

注意:

OpenAPI specification 目前最新版本是 3,但目前大部分工具对 2 的支持最好,教程中使用的库仅支持 2。

drf-yasg

drf-yasg 是一个 django 的第三方应用,它可以从 django-rest-framework 框架编写的代码中自动提取接口信息来生成符合 OpenAPI 标准的文档。我们将使用它来生成博客应用的接口文档。

第一步当然是安装 drf-yasg,进入项目根目录,运行命令 :

Command Tab

Linux/macOS
$ pipenv install drf-yasg
复制代码
Windows
...\> pipenv install drf-yasg
复制代码

然后将 drf-yasg 添加到 INSTALLED_APPS 配置项中:

# filename="blogproject/settings/common.py"
INSTALLED_APPS = [
    # 其它已添加的应用...
        "pure_pagination",  # 分页
    "haystack",  # 搜索
    "drf_yasg", # 文档
]
复制代码

接着使用 drf_yasg 提供的函数来创建一个 django 视图,这个视图将返回 HTML 格式的文档内容,这样我们就可以直接在浏览器查看到博客的接口文档:

# filename="blogproject/urls.py"
from django.urls import include, path, re_path
from drf_yasg import openapi
from drf_yasg.views import get_schema_view
from rest_framework import permissions, routers


schema_view = get_schema_view(
    openapi.Info(
        title="HelloDjango REST framework tutorial API",
        default_version="v1",
        description="HelloDjango REST framework tutorial AP",
        terms_of_service="",
        contact=openapi.Contact(email="zmrenwu@163.com"),
        license=openapi.License(name="GPLv3 License"),
    ),
    public=True,
    permission_classes=(permissions.AllowAny,),
)

urlpatterns = [
    # 其它已注册的 URL 模式...
  
    # 文档
    re_path(
        r"swagger(?P<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"),
]
复制代码

只需要使用 get_schema_view 就可以生成一个文档视图,然后我们将这个视图函数映射到了 4 个 URL。

现在进入项目根目录,启动开发服务器:

Command Tab

Linux/macOS
$ pipenv run python manage.py runserver
复制代码
Windows
...\> pipenv run python manage.py runserver
复制代码

然后访问 http://127.0.0.1:8000/swagger/ 或者 http://127.0.0.1:8000/redoc/,你就可以看到drf-yasg 自动生成的 HTML 格式的接口文档了。如果访问 http://127.0.0.1:8000/swagger.json或者 http://127.0.0.1:8000/swagger.yaml 就可以看到原始的 OpenAPI 标准文档,swagger 和 redoc 都是基于这个标准文档来生成可视化的 UI 界面的。

完善文档

drf-yasg 毕竟不是使用人工智能开发的,即使是使用人工智能,也很难做到 100% 的正确,毕竟由人类写的代码可能是千变万化的,工具无法预料到所有可能的情况,一旦它遇到无法处理的地方,自动生成的文档就可能出错,或者生成的内容不符合我们的预期。

我们不妨访问 http://127.0.0.1:8000/swagger/ 先来看看没做任何定制化之前生成的效果。可以看到内容大体上是正确的,接口基本上都罗列了出来,但是仔细检查各个接口的内容,就会发现一些问题:

  1. GET /api-version/test/ 这个接口是我们用来测试的,不希望它显示在文档里。
  2. 基本上没有任何描述信息来说明这个接口的功能。
  3. 接口的部分参数也没有描述信息,可能会让接口的使用者无法知道其准确含义。
  4. GET /posts/archive/dates/ 这个接口显示的参数是错误的,它不应该接受任何查询参数,接口响应参数也是错误的。
  5. GET /posts/{id}/comments/ 这个接口应该还支持分页查询的参数,但生成的文档中没有列出,接口响应参数也是错误的,正确的应该是一个分页后的评论列表,但文档中是单个评论对象。
  6. GET /search/ 没有列出搜索参数 text。
  7. 多出一个 GET /search/{id}/ 接口,这个接口我们并不需要其被使用,因此也无需在文档列出。

接下来我们就一个个地来解决上面的问题,只需要稍加改变一下 drf-yasg 的默认行为,就能够生成我们预期的文档内容。

隐藏不需要的接口

首先将第 1 点和第 7 点提到的不需要的接口从自动生成的文档中隐藏。

对于 GET /api-version/test/ 这个接口,它对应的视图集是 ApiVersionTestViewSet,给这个视图集添加一个 swagger_schema 类属性,将值设为 None,这样 drf-yasg 就知道忽略这个视图集对应的接口了。

# filename="blog/views.py"
class ApiVersionTestViewSet(viewsets.ViewSet):  # pragma: no cover
    swagger_schema = None
复制代码

隐藏 GET /search/{id}/ 接口的方式稍微有点不同,因为对应的视图集 PostSearchView 不只这一个接口,上面的处理方式会把整个视图集的接口都隐藏,我们需要想办法隐藏指定 action 对应的接口。

drf-yasg 提供了一个 swagger_auto_schema 装饰器来装饰视图,只需要为装饰器设置 auto_shema=None 就可以让 drf-yasg 忽略掉被装饰的视图,具体用法如下:

# filename="blog/views.py"
from django.utils.decorators import method_decorator
from drf_yasg.utils import swagger_auto_schema


@method_decorator(
    name="retrieve",
    decorator=swagger_auto_schema(
        auto_schema=None,
    ),
)
class PostSearchView(HaystackViewSet):
    index_models = [Post]
    serializer_class = PostHaystackSerializer
    throttle_classes = [PostSearchAnonRateThrottle]
复制代码

需要隐藏的接口对应 retrieve 这个 action,因此我们装饰的是这个方法。因为 PostSearchView 继承自 HaystackViewSet,在代码中并没有显示地定义 retrieve 这个方法,而是从父类继承而来,所以我们借助 django 提供的辅助函数 method_decorator 非侵入式地为类的某个方法添加装饰器。

现在访问接口文档地址,可以看到不需要的接口已经从文档中隐藏了。

添加接口功能描述信息

接下来解决第 2 个问题,为接口添加必要的功能描述。drf-yasg 支持从视图的 docstring 解析接口对应的描述信息,只要符合指定的格式即可。

先来一个简单例子,为 GET /categories/ 这个接口添加描述信息,找到 CategoryViewSet 视图集,添加格式化的 docstring:

# filename="blog/views.py"
class CategoryViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
    """
    博客文章分类视图集

    list:
    返回博客文章分类列表
    """
复制代码

CategoryViewSet 视图集就一个接口,对应的 action 是 list,因此 docstring 的格式就像上面那样,文档中的效果如下:

 

 

 

可以看到接口请求 URL 下方多出了我们写的描述内容。其它一些简单的接口都可以用这种方式来添加功能描述信息,留作练习的内容交给你自己了。

tip 描述的内容还支持 Markdown 格式,这样我们可以根据需要写出格式丰富的内容。

对于稍微复杂一点视图集,例如 PostViewSet,这个视图集含有多个 action 对应多个接口,功能描述信息的格式差不多是一样的,关键点是指明每个 action 对应的内容:

# filename="blog/views.py"
class PostViewSet(
    mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet
):
    """
    博客文章视图集

    list:
    返回博客文章列表

    retrieve:
    返回博客文章详情

    list_comments:
    返回博客文章下的评论列表

    list_archive_dates:
    返回博客文章归档日期列表
    """
复制代码

添加参数说明

接着我们来完善接口的参数说明文档。通过查看自动生成的文档中各个接口的参数,发现主要有这么几个问题:

  • 有些参数没有说明,无法准确知道其含义。
  • 有些接口该有的参数,文档中没有列出。
  • 有些接口不该有的参数,文档中却列出来了。

例如我们可以看到 GET /posts/{id}/ 这个接口的响应参数,其中大部分有中文信息的描述,我们可以推断,这些说明都是 drf-yasg 自动从定义在 Post 模型各字段的 verbose_name 参数的值提取的。其中 toc 和 body_html 因为不是 Post 中定义的字段,所以 drf-yasg 无法知道关于这两个字段的说明。

drf-yasg 是如何知道这个接口会返回哪些响应参数的呢?原理是 drf-yasg 会尝试去解析接口对应的序列化器(Serializer),从序列化器中提取出对应的请求和响应字段(如果序列化器中找不到,它会进一步去序列化器关联的模型中找),因此我们就可以给序列化器中定义的字段添加说明信息。例如我们来给 toc 和 body_html 添加 label 参数:

# filename="blog/views.py"
class PostRetrieveSerializer(serializers.ModelSerializer):
    toc = serializers.CharField(label="文章目录")
    body_html = serializers.CharField(label="文章内容")
复制代码

访问接口文档地址,找到对应的接口,可以看到文档中这两个字段添加了对应的说明信息,还可以通过 help_text(Model 中的字段也支持这个参数)来添加更为详细的描述,例如:

# filename="blog/serializers.py"
class PostRetrieveSerializer(serializers.ModelSerializer):
    toc = serializers.CharField(label="文章目录", help_text="HTML 格式,每个目录条目均由 li 标签包裹。")
    body_html = serializers.CharField(
        label="文章内容", help_text="HTML 格式,从 `body` 字段解析而来。"
    )
复制代码

这样两个字段的含义就非常清晰了,效果如下:

 

其它一些没有说明信息的字段都可以根据这种方式来添加,只需要找到文档中的参数在代码中对应的来源字段就可以了。除了在序列化器(Serializer)、模型(Model)里面添加。查询过滤参数也是可以这样设置的,例如先来看一下 GET /posts/ 的参数:

 

 

可以看到用来过滤文章列表的参数都没有说明,这些字段都定义在 PostFilter 中,我们来改一下代码,添加必要的说明信息后再去文档中看看效果吧!

# filename="blog/filters.py"
from .models import Category, Post, Tag

class PostFilter(drf_filters.FilterSet):
    created_year = drf_filters.NumberFilter(
        field_name="created_time", lookup_expr="year", help_text="根据文章发表年份过滤文章列表"
    )
    created_month = drf_filters.NumberFilter(
        field_name="created_time", lookup_expr="month", help_text="根据文章发表月份过滤文章列表"
    )
    category = drf_filters.ModelChoiceFilter(
        queryset=Category.objects.all(),
        help_text="根据分类过滤文章列表",
    )
    tags = drf_filters.ModelMultipleChoiceFilter(
        queryset=Tag.objects.all(),
        help_text="根据标签过滤文章列表",
    )

    class Meta:
        model = Post
        fields = ["category", "tags", "created_year", "created_month"]
复制代码

接着我们来看 GET /posts/archive/dates/ 和 GET /posts/{id}/comments/ 这两个接口。前者文档中显示了一些错误的参数,后者本应该有分页参数,但是文档却没有列出。

先来看 GET /posts/archive/dates/,它对应的 action 是 list_archive_dates,由于 action 默认会从它所在的视图集中继承一些属性,而 drf-yasg 会从这些属性去解析接口支持的参数,例如视图集设置了 filterset_class = PostFilter 和 pagination_class=PageNumberPagination(虽然不在视图集中显示定义,但在全局进行了配置),在解析 list_archive_dates 的参数时,drf-yasg 错误地解析到了从视图集继承来的 PostFilter 和 PageNumberPagination,所以就把这两个类中定义的参数也包含进文档了。

知道了原因,解决方法也就有了,在 list_archive_dates action 中把这两个属性设为 None,覆盖掉视图集中的默认设置:

# filename="blog/views.py"
class PostViewSet(
    mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet
):
  @action(
        # ...
        filter_backends=None, # 将 filter_backends 设为 None,filterset_class 也就不起作用了。
        pagination_class=None,
    )
    def list_archive_dates(self, request, *args, **kwargs):
        # ...
复制代码

再来看看这个接口,就没有那些错误的参数了。

接着处理 GET /posts/{id}/comments/ 接口,我们需要文档列出分页参数。这个接口对应的 action 是 list_comment。从上面的分析来看,这个 action 明明已经指定了 pagination_class=LimitOffsetPagination,为什么 drf-yasg 无法自动检测到分页参数呢?原因是这个 action 设置了 detail=True。当 detial=True 时,drf-yasg 会将这个 action 对应的接口看做获取单个资源的接口,因此它认为分页是不需要的。但实际上我们对这个接口进行了定制,它返回的其实是评论列表。解决办法是应该告诉 drf-yasg,这个接口返回的是列表结果,请去解析列表接口相关的一些参数:

# filename="blog/views.py"
class PostViewSet(
    mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet
):
    @action(
        methods=["GET"],
        detail=True,
        # ...
        suffix="List",  # 将这个 action 返回的结果标记为列表,否则 drf-yasg 会根据 detail=True 误判为这是返回单个资源的接口
        pagination_class=LimitOffsetPagination,
        serializer_class=CommentSerializer,
    )
    def list_comments(self, request, *args, **kwargs):
        # ...
复制代码

但是 drf-yasg 还是不够聪明,当它去解析列表接口可能的参数时,顺便又把 PostFilter 中的字段也一并解析了,这是用来过滤博客文章的,显然不能用于过滤评论列表,我们需要将这些无关参数移除,解决方法在处理 GET /posts/archive/dates/ 接口时就讲过了,把 filter_backends 设置成 None 就可以了。

更正错误的响应参数

仔细看生成的接口文档,发现有 2 个接口的返回内容是错误的。

一是 GET /posts/{id}/comments/,最初我们发现这个接口文档的响应是一个单一的评论对象,原因我们上面也分析了,drf-yasg 根据 detail=True 误地将其作为返回单一资源的接口处理了。随着为其添加更多信息,告诉 drf-yasg 这是一个返回资源列表的接口,问题也就顺便解决了。

二是 GET /posts/archive/dates/,这个接口的返回内容应该是一个日期列表,但是文档中显示的竟然是博客文章列表。drf-yasg 推断的响应类型是正确的,但内容不对。原因也很明显,这个接口对应的 action 是 list_archive_dates,drf-yasg 在这个 action 中没有找到解析响应结果的序列化器(Serializer),所以它跑去视图集 PostViewSet 中去找了,结果找到了 PostListSerializer,然后把这个当成了接口返回的内容进行解析了。

由于这个接口返回的仅仅是一个简单的日期列表,并不涉及到序列化器,因此这里我们不使用指定 serializer_class 属性值的方式,而是使用 swagger_auto_schema 装饰器,直接告诉 drf-yasg 接口返回的响应:

# filename="blog/views.py"
class PostViewSet(
    mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet
):
        @swagger_auto_schema(responses={200: "归档日期列表,时间倒序排列。例如:['2020-08', '2020-06']"})
    @action(
        methods=["GET"],
        detail=False,
        url_path="archive/dates",
        url_name="archive-date",
        filter_backends=None,
        pagination_class=None,
    )
    def list_archive_dates(self, request, *args, **kwargs):
        # ...
复制代码

responses 参数的值是一个字典,字典的键是 HTTP 响应码,值可以是一个序列化器,这样 drf-yasg 会拿这个序列化器去解析接口响应的参数;也可以是一个字符串,drf-yasg 会把字符串直接当做接口响应结果写入文档中。看看修改后的效果:

 

 

 

至此,我们就有了一套比较完善的博客接口文档了,而且大部分内容均由 drf-yasg 为我们自动生成,省去了不少手写文档的麻烦。

参考资料

以下是教程中用到的一些参考:

小贴士:

drf-yasg 的官方文档对于这个库的使用方法写的不是很清晰,这篇文章中列出的一些用法都是从源码中看出来的。如果你在使用过程中遇到了问题,首先尝试分析问题的原因,然后顺藤摸瓜去找到相关的源码,看看库的内部是如何处理你所遇到的问题的,这样就可以针对性地给出解决方案了,这篇教程中列出的很多问题以及最后给出的解决方案,都是使用的这种方式。

关于手动的接口测试 这是关于手机登陆的接口测试,请慎用!,用起来的感觉还是不错的、 立即下载

相关推荐

技术解析:ChangeFormer——基于Transformer的孪生网络在遥感变化检测中的创新应用

本文深入解析了ChangeFormer模型在遥感变化检测中的创新应用,该模型基于Transformer架构和孪生网络(Siamese Network),显著提升了变化检测的精度和效率。通过详细的技术实现和实战经验分享,展示了其在建筑物变化、森林监测等场景中的卓越表现,为相关领域的研究和应用提供了有力工具。

weixin_29102619的博客 496

教程12 drf-yasg + Django REST framework 后端接口开发(用户管理、留言管理)

教程12 drf-yasg + Django REST framework 后端接口开发(用户管理、留言管理)

boxuestudio的博客 2861

【DSP】【工程实战】从零构建C6678多核工程:CCS环境配置与启动模式详解

本文详细介绍了在CCS开发环境中从零构建TMS320C6678多核DSP工程的完整流程。内容涵盖KeyStone架构解析、工程创建、基础代码编写、链接命令文件配置、仿真器调试,并重点深入讲解了包括I2C EEPROM在内的多种一级启动模式原理与配置方法,为开发者提供了一套清晰、可复用的实战指南。

weixin_29164185的博客 419

DRF-接口文档-(三方drf-yasg)-(简单使用): 使用自定义的认证类,使用jwt做token时,想要使用自动生成文档

使用jwt自定义的认证下,自动生成文档,django配置自动生成文档的同时,可以携带上token,使用drf-yags生成文档时配置上可以携带token

weixin_46371752的博客 3426

AICodeing:AI驱动的全栈开发革命

作为阿里/字节跳动的资深Java工程师,我们正站在研发效能革命的临界点上。本文将深入探讨如何利用AI技术重构全栈开发流程,实现从需求到上线的量子级提速。

weixin_43290370的博客 1134

STM32F4XX软件模拟I2C实现MPU6050姿态数据采集

本文详细介绍了在STM32F4XX平台上通过软件模拟I2C驱动MPU6050传感器实现姿态数据采集的完整方案。内容涵盖软件I2C的GPIO配置、核心通信函数实现、MPU6050寄存器配置详解以及数据读取处理流程,为硬件资源受限的嵌入式应用提供了灵活的解决方案,并分享了调试技巧与常见问题处理方法。

butter的博客 678

【DRF配置管理】如何建立swagger风格api接口文档

swagger风格的文档在很多语言中都存在,比如jave项目。DRF本身虽然可以实现swagger-ui展示,但是功能不完善,官方推荐的第三方库有drf-yasg 和drf-spectacular。因为采用的身份验证方式不同,接口文档的设置会存在差异。如果使用的是jwt身份验证,我们需要专门设置对应的headers参数。

黎明总是如期而至 1323

华为OD机试 - 魔法收积木 - 二进制(Java 新系统 200分)

华为OD机试 新系统 题库疯狂收录中,刷题。

学Java,找哪吒 443

终极指南:为什么你应该选择drf-yasg替代Django REST Swagger

如果你正在使用Django REST Framework开发API,那么一个优秀的API文档生成工具是必不可少的。虽然Django REST Swagger曾经是主流选择,但该项目已于2019年停止维护。今天,我将向你推荐一个功能更强大、持续更新的开源API文档新星——**drf-yasg**。 ## 🚨 Django REST Swagger已过时 从项目的README.md文件可以清楚地

gitblog_00103的博客 727

平头哥面试——芯片工程师面经

有5个成递增关系的32bit地址值,彼此之间的间隔大小不确定,可以把他们当成parameter来输入模块,现有一个32bit输入数据,要求用尽量少资源去的判断这个数处于哪2个地址之间(地址区间),并且输出区间号。a)后续大概会在9月下旬谈具体的薪资,他们现在也没想好今年应届生的薪资该给多少,到时候如果可以签三方的话可能会跳过意向书环节直接发offer,谈薪资肯定是通过电话来。b. 这边的CPU是自己研制的(玄铁),成都这边主要做存储和网络,都有SOC。a. 成都这边的网络部门具体做的业务有哪些?

FPGA/MATLAB学习教程/源码/项目合作开发 2688

实现电脑同时上内网和外网(或通过外网访问到该电脑通过该电脑访问内网)

一、需求描述 目前使用的公司网络只能够上内网,但是又有上外网查资料的需求: ①想要实现电脑既能上内网的同时也可以上外网; ②想要使用其他外网电脑使用外网连接到该电脑,通过该电脑访问内部的网络内容。 二、准备内容 电脑必须具备两个网卡,即:可以同时连接内网和外网(比如我的笔记本就可以:使用网线连接笔记本网口与内网通讯,使用WIFI连接手机热点访问外部网络); 注意:如果只有一个网口,可以另外购买USB的无线网卡来实现上网卡。 三、实现电脑同时上内网和外网的操作步骤 3.1、网络拓扑图 ..

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 2万+

drf_yasg定制

在写DRF接口的时候,如果我们使用的ModelViewset,这个时候生成的swagger接口文档中,参数和响应都是没有问题的。但是有些接口,我们需要定制,这时候的接口文档显得不那么友好。 栗子.py from drf_yasg import openapi from drf_yasg.utils import swagger_auto_schema class StorageViewSet(APIView): #定义warehouseId字字段 # required -> 是否必填 #

菜鸟猿小天 1367

Archery通过OpenResty代理转发后登录一直提示Forbidden

测试几遍,连账号密码都没用验证,因为不管输什么都是提示Forbidden。找到配置文件settings.py,下面命令可到配置文件路径。回到页面刷新,随便输入个账号密码,验证失败证明请求成功了。查看Preview,提示CSRF验证失败,请求被中断。域名:dba.hkeasyspeed.com。打开开发者工具查看,网络里面可以看到报403。添加一条配置,把你配置域名添加进去。可以看到页面可以正常访问到。进入Archery容器。重启Archery容器。正常输入账号密码,OK。

万物皆可学 3144

第 16 篇:别再手动管理接口文档了

作者:HelloGitHub-追梦人物大多数情况下,开发的接口都不是给开发这个接口的人用的,所以如果没有接口文档,别人就无法知道有哪些接口可以调用,即使知道了接口的 URL,也很难知道接...

HelloGitHub 的博客 1804

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

restful 接口文档_第 16 篇:别再手动管理接口文档了

作者:HelloGitHub-追梦人物大多数情况下,开发的接口都不是给开发这个接口的人用的,所以如果没有接口文档,别人就无法有哪些接口可以调用,即使知道了接口的 URL,也很难知道接口需要哪些参数,即使知道了这些参数,也可能无法理解这些参数的含义。因此接口文档应该是项目必不可少的配置。编写接口文档有很多种方式,最为简单直接的方式就是打开一个记事本或者 word 文档,将接口的详细信息和用法写下来,...

weixin_39736650的博客 404

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

python文件管理api_看透 管理接口文档

大多数情况下,开发的接口都不是给开发这个接口的人用的,所以如果没有接口文档,别人就无法有哪些接口可以调用,即使知道了接口的 URL,也很难知道接口需要哪些参数,即使知道了这些参数,也可能无法理解这些参数的含义。因此接口文档应该是项目必不可少的配置。编写接口文档有很多种方式,最为简单直接的方式就是打开一个记事本或者 word 文档,将接口的详细信息和用法写下来,别人就可以参考这个文档来调用接口。这样...

weixin_39979489的博客 275

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Swagger-UI 接口文档一键导出为Word:提升文档管理效率的利器

Swagger-UI 接口文档一键导出为Word:提升文档管理效率的利器 【下载地址】Swagger-UI接口文档导出为Word教程 Swagger-UI 接口文档导出为Word教程欢迎使用Swagger-UI接口文档导出为Word的便捷解决方案 ...

gitblog_06592的博客 1175

【springboot 开发工具】接口文档我正在使用它生成,舒坦

先来描述下背景:由于新公司业务属于自研产品开发,但是发现各产品业务线对于接口文档暂时还是通过集成Swagger来维护,准确来说是knife4j(Swagger的增强解决方案)。但是对于5年的后端开发老说,早就厌倦了一个接口一个接口写到postman的重复操作了,所以必须搞个简便方式。个人建议Swagger更适合用于一些对接口规范及维护要求较低的行业项目类软件开发,相对于开发而言,接口的文档生成及调试更加方便快捷。框架SwaggerYapiShowdocApiPost代码侵入性强无无无。

在计算机领域混战了5年的java开发工程师,正在向全栈奋斗的路上。目前在学习和分享:Java,springboot,spring,vue,系统开发,服务器运维(可做毕业设计)等相关知识。 881

自动化生成接口文档:详细教程及最佳实践

Apifox IDEA插件使用指南:一键生成接口文档,代码零入侵,团队协作更高效。安装插件后配置访问令牌和项目ID,右键点击即可自动生成或更新文档。文档支持云端管理、在线分享、Mock数据和自动化测试,提升开发效率。适合前后端协作场景,减少沟通成本。

weixin_71807218的博客 980

别再手动写接口文档了!用drf-spectacular+Swagger为你的Django项目自动生成漂亮文档

本文介绍了如何使用drf-spectacular和Swagger为Django项目自动生成接口文档,解决手动维护文档的痛点。通过OpenAPI规范,实现文档与代码同步,提升团队协作效率。详细讲解了集成步骤、高级配置及团队协作最佳实践,帮助开发者快速构建智能化的文档工作流。

weixin_30776273的博客 472

推荐一款开源、可视化的接口管理平台!

YApi 是一款开源、可视化的接口管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。 它可以帮助团队更轻松地管理和共享API接口文档、Mock数据、接口测试等。开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。YApi具有以下特点:可视化接口管理:YApi提供了可视化的接口管理界面,可以方便地创建、编辑和查看接口文档。接口Mock:YApi可以根据接口文...

测试开发技术 2462

RuoYi-Vue Swagger3.0 接口文档配置教程:五步跑通自动生成的接口文档

这篇教程带你从零为 RuoYi-Vue(基于 SpringBoot 的前后端分离权限管理系统)配置 Swagger3.0(OpenAPI 3.0)接口文档系统。跟着做五步,你会得到一个随代码自动生成、可直接在线调试的接口文档页面,彻底告别手动维护接口说明。 ## 场景:接口文档靠口口相传的代价 🙋 想象一个常见的开发现场:后端新加了一个接口,前端来问"入参是什么、返回结构长什么样",你翻出一

gitblog_00109的博客 92

快速生成好看实用的接口文档

一键生成文档 打开apipost点击分享文档 复制并打开文档地址就可以看到了完整的接口文档。 本节课主要是讲解一些需要注意的事项。 请求参数的描述填写 对于header、query以及form-data和urlencode的body参数,我们在如下地方填写参数描述: 如图中所示,对于一个填写过的参数,我们可以在新建接口可以通过点击参数描述后面的♦️方块标志快速导入描述,不用重复打字。 对于raw类型的body参数,我们可以通过点击“提取字段和描述”来针对参数进行描述的填写: 对于已经填写过的参数,A

weixin_44159454的博客 467

在 Vue.js 中使用 Mock.js 实现接口模拟

本文内容问题现状改进思路SwaggerMock.js登高望远 最近这段时间,我一直在参与一个前端项目。每当我从庸碌的生活中赢得片刻喘息的时候,我不由得感慨,在程序员朴实无华且枯燥的职业生涯里,写自己喜欢的代码的机会少之又少,写别人喜欢的代码的机会俯拾皆是,更多的时候像是“为他人作嫁衣裳”。古人云,“遍身罗绮者,不是养蚕人”,当每天面对着被改得面目全非的代码的时候,内心固然早已波澜不惊、宠辱偕忘,可还是会期待美好的事情发生,因为从工程化的角度而言,每天都在思考的事情,其实就是怎么样做会更好一点。过去这些年里,

素履独行 | 元培的个人博客 3709
上一篇: Kubernetes怎么对Go服务进行扩容、更新、回滚、平滑重启?教你用Deployment全搞定!
下一篇: 腾讯专家整理的面试全秘籍,我看了两个月,入职京东,税前30K,太香了!
java架构师小芷
博客等级 码龄6年 216粉丝 519原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值