如何规范编写接口文档?推荐几款接口文档编写生成神器

知梧 464 2022-09-08


本文关于如何规范编写接口文档?推荐几款接口文档编写生成神器。


⭐️ 写接口文档的四种方式

目前流行的前后端分离模式,在前后端进行数据交互之前,后端需要把数据交互的接口的作用、地址、格式等信息提供给前端,需要我们书写标准的接口文档,以便与前端进行数据交互。

  1. 使用word或者md文档编写,自己纯手写

  2. 第三方平台录入数据,固定的位置填固定的东西

    1. EOLINKER(推荐)可以协作,界面简洁
    地址:https://www.eolinker.com/#/?status=link-jump2.RAP(前阿里妈妈团队)支持版本管理,开源,有文档
    地址:http://rap2.taobao.org/3.EasyAPI  (相对来说easy)
    地址:https://www.easyapi.com/4.apizza
    地址:https://apizza.net/pro/#/5.showdoc
    地址:https://www.showdoc.cc/6.胖胖羊
    地址:http://doclever.cn/controller/console/console.html

  3. 公司自己开发接口平台,搭建接口平台

  4. 自动生成接口文档:coreapi,swagger

也可以直接把 postman 的测试接口集合导出成文件,发送给前端

image

参考接口文档:

  • https://open.weibo.com/wiki/2/users/show

  • https://www.cnblogs.com/noteaddr/p/12971759.html

  • https://zhuanlan.zhihu.com/p/366025001

DRF 自动生成接口文档步骤(coreapi)

1、安装coreapi :pip3 install coreapi

2、书写路由:

参数title为接口文档网站的标题

from rest_framework.documentation import include_docs_urls

urlpatterns = [
   ...
   path('docs/', include_docs_urls(title='站点页面标题'))
]

3、写好视图层类

4、项目下的配置文件 settings.py 配置 :

REST_FRAMEWORK = { 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',    # 新版drf schema_class默认用的是rest_framework.schemas.openapi.AutoSchema}# 不配置报错:#AttributeError: 'AutoSchema' object has no attribute 'get_link'

5、访问地址: http://127.0.0.1:8000/docs/

6、给前端,前端按照这个接口文档开发

7、基于这个,录入到第三方接口平台,自己写word文档

image


文档描述说明的定义位置

1) 单一方法的视图,可直接使用类视图的文档字符串,如

class BookListView(generics.ListAPIView):    """
   返回所有图书信息.
   """

2)包含多个方法的视图,在类视图的文档字符串中,分开方法定义,如

class BookListCreateView(generics.ListCreateAPIView):    """
   get:
   返回所有图书信息.

   post:
   新建图书.
   """

3)对于视图集ViewSet,仍在类视图的文档字符串中分开定义,但是应使用action名称区分,如

class BookInfoViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, GenericViewSet):    """
   list:
   返回图书列表数据

   retrieve:
   返回图书详情数据

   latest:
   返回最新的图书数据

   read:
   修改图书的阅读量
   """
   

写视图类,只需要加注释即可

1) 视图集ViewSet中的retrieve名称,在接口文档网站中叫做read

2)参数的Description需要在模型类或序列化器类的字段中以help_text选项定义,如:

class Student(models.Model):
   ...
   age = models.IntegerField(default=0, verbose_name='年龄', help_text='年龄')
   ...

class StudentSerializer(serializers.ModelSerializer):    class Meta:
       model = Student
       fields = "__all__"
       extra_kwargs = {            'age': {                'required': True,                'help_text': '年龄'
           }
       }

接口文档组成

1 HTTP携带信息的方式

  • url

  • headers

  • body: 包括请求体,响应体

2 分离通用信息

一般来说,headers里的信息都是通用的,可以提前说明,作为默认参数

3 路径中的参数表达式

URL中参数表达式使用mustache的形式,参数包裹在双大括号之中``

例如:

  • /api/user/

  • /api/user/?age=&gender=

4 数据模型定义

数据模型定义包括:

  • 路径与查询字符串参数模型

  • 请求体参数模型

  • 响应体参数模型

数据模型的最小数据集:

  • 名称

  • 是否必须

  • 说明

“最小数据集”(MDS)是指通过收集最少的数据,较好地掌握一个研究对象所具有的特点或一件事情、一份工作所处的状态,其核心是针对被观察的对象建立起一套精简实用的数据指标。最小数据集的概念起源于美国的医疗领域。最小数据集的产生源于信息交换的需要,就好比上下级质量技术监督部门之间、企业与质量技术监督部门之间、质量技术监督部门与社会公众之间都存在着信息交换的需求。

一些文档里可能会加入字段的类型,但是我认为这是没必要的。以为HTTP传输的数据往往都需要序列化,大部分数据类型都是字符串。一些特殊的类型,例如枚举类型的字符串,可以在说明里描述。

另外:数据模型非常建议使用表格来表现

举个栗子?:

名称

是否必须

说明




userType

用户类型。commom表示普通用户,vip表示vip用户

age

用户年龄

gender

用户性别。1表示男,0表示女

5 请求示例

// general POST http://www.testapi.com/api/user// request payload{    "name": "qianxun",    "age": 14,    "like": ["music", "reading"],    "userType": "vip"}// response{    "id": "asdkfjalsdkf"}

6 异常处理

异常处理最小数据集

  • 状态码

  • 说明

  • 解决方案

举个栗子?:

状态码

说明

解决方案




401

用户名密码错误

检查用户名密码是否正确

424

超过最大在线数量

请在控制台修改最大在线数量

之前我一直不想把解决方案加入异常处理的最小数据集,但是对于很多开发者来说,即使它知道424代表超过最大在线数量。如果你不告诉如果解决这个问题,那么他们可能就会直接来问你。所以最好能够一步到位,直接告诉他应该如何解决,这样省时省力。

7 如何组织?

7.1 一个创建用户的例子:创建用户

1 请求示例

// general POST http://www.testapi.com/api/user/vip/?token=abcdefg// request payload{    "name": "qianxun",    "age": 14,    "like": ["music", "reading"]
}// response{    "id": "asdkfjalsdkf"}

2 路径与查询字符串参数模型

POST http://www.testapi.com/api/user//?token=

名称

是否必须

说明




userType

用户类型。commom表示普通用户,vip表示vip用户

token

认证令牌

3 请求体参数模型

名称

是否必须

说明




name

用户名。4-50个字符

age

年龄

like

爱好。最多20个

4 响应体参数模型

名称

说明



id

用户id

5 异常处理

状态码

说明

解决方案




401

token过期

请重新申请token

424

超过最大在创建人数

请在控制台修改最大创建人数

7.2 这样组织的原因

  1. 请求示例: 请求示例放在第一位的原因是,要用最快的方式告诉开发者,这个接口应该如何请求

  2. 路径与查询字符串参数模型: 使用mustache包裹参数

  3. 请求体参数模型:如果没有请求体,可以不写

  4. 响应体参数模型

  5. 异常处理

8 文档提供的形式

文档建议由一下两种形式,在线文档pdf文档

  • 在线文档

    • 更新方便

    • 易于随时阅读

    • 易于查找

  • pdf文档

    • 内容表现始终如一,不依赖文档阅读器

    • 文档只读,不会被轻易修改

其中由于是面对第三方开发者,公开的在线文档必须提供;由于某些特殊的原因,可能需要提供文件形式的文档,建议提供pdf文档。当然,以下的文档形式是非常不建议提供的:

  • word文档

  • markdown文档

word文档和markdown文档有以下缺点:

  • 文档的表现形式非常依赖文档查看器:各个版本的word文档对word的表现形式差异很大,可能在你的电脑上内容表现很好的文档,到别人的电脑上就会一团乱麻;另外markdown文件也是如此。而且markdown中引入文件只能依靠图片链接,如果文档中含有图片,很可能会出现图片丢失的情况。

  • 文档无法只读:文档无法只读,就有可能会被第三方开发者在不经意间修改,那么文档就无法保证其准确性了。

总结一下,文档形式的要点:

  • 只读性:保证文档不会被开发者轻易修改

  • 一致性:保证文档在不同设备,不同文档查看器上内容表现始终如一

  • 易于版本管理:文档即软件(DAAS: Document as a Software),一般意义上说软件 = 数据 + 算法, 但是我认为文档也是一种组成软件的重要形式。既然软件需要版本管理,文档的版本管理也是比不可少的。


⭐️ 推荐几款接口文档生成神器

gitbook

github地址:https://github.com/GitbookIO/gitbook

开源协议:Apache-2.0 License

Star: 22.9k

开发语言:javascript

用户:50万+

推荐指数:★★★

示例地址:https://www.servicemesher.com/envoy/intro/arch_overview/dynamic_configuration.html

gitBook是一款文档编辑工具。它的功能类似金山WPS中的word或者微软office中的word的文档编辑工具。它可以用来写文档、建表格、插图片、生成pdf。当然,以上的功能WPS、office可能做得更好,但是,gitBook还有更最强大的功能:它可以用文档建立一个网站,让更多人了解你写的书,另外,最最核心的是,他支持Git,也就意味着,它是一个分布式的文档编辑工具。你可以随时随地来编写你的文档,也可以多人共同编写文档,哪怕多人编写同一页文档,它也能记录每个人的内容,然后告诉你他们之间的区别,也能记录你的每一次改动,你可以查看每一次的书写记录和变化,哪怕你将文档都删除了,它也能找回来!这就是它继承git后的厉害之处!

优点:使用起来非常简单,支持全文搜索,可以跟git完美集成,对代码无任何嵌入性,支持markdown格式的文档编写。

缺点:需要单独维护一个文档项目,如果接口修改了,需要手动去修改这个文档项目,不然可能会出现接口和文档不一致的情况。并且,不支持在线调试功能。

个人建议:如果对外的接口比较少,或者编写之后不会经常变动可以用这个。

smartdoc

gitee地址:https://gitee.com/smart-doc-team/smart-doc

开源协议:Apache-2.0 License

Star: 758

开发语言:html、javascript

用户:小米、科大讯飞、1加

推荐指数:★★★★

示例地址:https://gitee.com/smart-doc-team/smart-doc/wikis/文档效果图?sort_id=1652819

smart-doc是一个java restful api文档生成工具,smart-doc颠覆了传统类似swagger这种大量采用注解侵入来生成文档的实现方法。smart-doc完全基于接口源码分析来生成接口文档,完全做到零注解侵入,只需要按照java标准注释的写就能得到一个标准的markdown接口文档。

优点:基于接口源码分析生成接口文档,零注解侵入,支持html、pdf、markdown格式的文件导出。

缺点:需要引入额外的jar包,不支持在线调试

个人建议:如果实时生成文档,但是又不想打一些额外的注解,比如:使用swagger时需要打上@Api、@ApiModel等注解,就可以使用这个。

redoc

github地址:https://github.com/Redocly/redoc

开源协议:MIT License

Star: 10.7K

开发语言:typescript、javascript

用户:docker、redocly

推荐指数:★★★☆

示例地址:https://docs.docker.com/engine/api/v1.40/

redoc自己号称是一个最好的在线文档工具。它支持swagger接口数据,提供了多种生成文档的方式,非常容易部署。使用redoc-cli能够将您的文档捆绑到零依赖的 HTML文件中,响应式三面板设计,具有菜单/滚动同步。

优点:非常方便生成文档,三面板设计

缺点:不支持中文搜索,分为:普通版本 和 付费版本,普通版本不支持在线调试。另外UI交互个人感觉不适合国内大多数程序员的操作习惯。

个人建议:如果想快速搭建一个基于swagger的文档,并且不要求在线调试功能,可以使用这个。

knife4j

gitee地址:https://gitee.com/xiaoym/knife4j

开源协议:Apache-2.0 License

Star: 3k

开发语言:java、javascript

用户:未知

推荐指数:★★★★

示例地址:http://swagger-bootstrap-ui.xiaominfo.com/doc.html

knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍。

优点:基于swagger生成实时在线文档,支持在线调试,全局参数、国际化、访问权限控制等,功能非常强大。

缺点:界面有一点点丑,需要依赖额外的jar包

个人建议:如果公司对ui要求不太高,可以使用这个文档生成工具,比较功能还是比较强大的。

yapi

github地址:https://github.com/YMFE/yapi

开源协议:Apache-2.0 License

Star: 17.8k

开发语言:javascript

用户:腾讯、阿里、百度、京东等大厂

推荐指数:★★★★★

示例地址:http://swagger-bootstrap-ui.xiaominfo.com/doc.html

yapi是去哪儿前端团队自主研发并开源的,主要支持以下功能:

可视化接口管理

数据mock

自动化接口测试

数据导入(包括swagger、har、postman、json、命令行)

权限管理

支持本地化部署

支持插件

支持二次开发

优点:功能非常强大,支持权限管理、在线调试、接口自动化测试、插件开发等,BAT等大厂等在使用,说明功能很好。

缺点:在线调试功能需要安装插件,用户体检稍微有点不好,主要是为了解决跨域问题,可能有安全性问题。不过要解决这个问题,可以自己实现一个插件,应该不难。

个人建议:如果不考虑插件安全的安全性问题,这个在线文档工具还是非常好用的,可以说是一个神器,笔者在这里强烈推荐一下。

apidoc

github地址:https://github.com/apidoc/apidoc

开源协议:MIT License

Star: 8.7k

开发语言:javascript

用户:未知

推荐指数:★★★★☆

示例地址:https://apidocjs.com/example/#api-User

apidoc 是一个简单的 RESTful API 文档生成工具,它从代码注释中提取特定格式的内容生成文档。支持诸如 Go、Java、C++、Rust 等大部分开发语言,具体可使用 apidoc lang 命令行查看所有的支持列表。

apidoc 拥有以下特点:

跨平台,linux、windows、macOS 等都支持;

支持语言广泛,即使是不支持,也很方便扩展;

支持多个不同语言的多个项目生成一份文档;

输出模板可自定义;

根据文档生成 mock 数据;

优点:基于代码注释生成在线文档,对代码的嵌入性比较小,支持多种语言,跨平台,也可自定义模板。支持搜索和在线调试功能。

缺点:需要在注释中增加指定注解,如果代码参数或类型有修改,需要同步修改注解相关内容,有一定的维护工作量。

个人建议:这种在线文档生成工具提供了另外一种思路,swagger是在代码中加注解,而apidoc是在注解中加数据,代码嵌入性更小,推荐使用。

showdoc

github地址:https://github.com/star7th/showdoc

开源协议:Apache Licence

Star: 8.1k

开发语言:javascript、php

用户:超过10000+互联网团队正在使用

推荐指数:★★★★☆

示例地址:https://www.showdoc.com.cn/demo?page_id=9

ShowDoc就是一个非常适合IT团队的在线文档分享工具,它可以加快团队之间沟通的效率。

它都有些什么功能:

响应式网页设计,可将项目文档分享到电脑或移动设备查看。同时也可以将项目导出成word文件,以便离线浏览。

权限管理,ShowDoc上的项目有公开项目和私密项目两种。公开项目可供任何登录与非登录的用户访问,而私密项目则需要输入密码验证访问。密码由项目创建者设置。

ShowDoc采用markdown编辑器,点击编辑器上方的按钮可方便地插入API接口模板和数据字典模板。

ShowDoc为页面提供历史版本功能,你可以方便地把页面恢复到之前的版本。

支持文件导入,文件可以是postman的json文件、swagger的json文件、showdoc的markdown压缩包,系统会自动识别文件类型。

优点:支持项目权限管理,多种格式文件导入,全文搜索等功能,使用起来还是非常方便的。并且既支持部署自己的服务器,也支持在线托管两种方式。

缺点:不支持在线调试功能

个人建议:如果不要求在线调试功能,这个在线文档工具值得使用。

上述就是小编为大家整理的如何规范编写接口文档?推荐几款接口文档编写生成神器。

国内(北京、上海、广州、深圳、成都、重庆、杭州、西安、武汉、苏州、郑州、南京、天津、长沙、东莞、宁波、佛山、合肥、青岛)eolink软件分析、比较及推荐。




版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ZTNA——零信任网络访问
下一篇:SpringMVC中的几个模型对象
相关文章

 发表评论

评论列表