正则+Python制作一个轻量级接口文档工具
ApiFormatMd 轻量级Java接口文档生成工具
特点
- 完全基于本地代码执行 Java代码无需引用额外依赖
- 生成MarkDown格式文档 可使用ShowDoc生成在线文档
配置项
main.py
- 作者 author = ‘江火似流萤’ (对应Md文档作者信息)
- 载入类根目录 root_path = r"/Users/xxx" (指定Java项目根目录,程序以此为起点遍历Java文件)
- 生成md文件目录 write_path = r"/Users/xxx/Desktop" (Md文档写入路径)
param.txt
- 参数 param.txt (Controller层接口信息 具体参考文件内容)
依赖
- python3
如何使用
方式一 生成文件到本地
- 本地安装python3环境
- clone本项目到本地
- 修改main.py ‘author’ ‘root_path’ 'write_path’配置(首次使用配置)
- API信息写入 param.txt 文件
- 执行
python3 main.py
终端输出 ‘success’ 则执行成功
方式二 生成文档到showDoc
- 基于方式一的配置 执行
python3 request_show_doc.py
- 打开 https://www.showdoc.com.cn/2040347871634336/ 查看文档
- 如果报错
ModuleNotFoundError: No module named 'requests'
需要导入request包执行pip3 install requests
方式三 写入utools插件一键生成文档到showDoc
- utools 安装
一步到位
插件 - 创建自己的插件
- 复制接口到utools生成文档
- 复制接口
- 粘贴到utools
- 成功提示(文档地址已复制到粘贴板)
- 浏览器打开文档
点击gitee查看源码
例子
java接口
查看代码
@RequestMapping(value = "/v1/test/{userId}", method = RequestMethod.POST)public JsonResult<List<Map<InvoiceVO.Extend, InvoiceVO>>> test(@PathVariable(value = "userId") int userId,@RequestParam(value = "roleCode", required = true) String roleCode,@RequestBody QuoteStrategyRule quoteStrategyRule) {return new JsonResult<>();}
QuoteStrategyRule(参数)
package com.peng.model;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.util.Date;@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName("quote_strategy_rule")
public class QuoteStrategyRule implements Serializable {@TableId(value = "id", type = IdType.AUTO)private Long id;/*** 所属策略ID*/private Long quoteStrategyId;/*** 所属渠道ID*/private Long resellerChannelId;/*** 所属分类 1 生活服务;2 酒店业务;3 飞机票价*/private Byte quoteStrategyCategory;/*** 引用ID,类型为1是0; 类型为2是大类枚举值; 类型为3是子类枚举值;类型为4商品ID;类型为5是规格ID;类型为6是规格ID*/private Byte type;/*** 类型为1是【分类名称】; 类型为2是【分类名称>大类名称】;* 类型为3是【分类名称>大类名称>子类名称】;* 类型为4是【分类名称>商品id】;类型为5是【分类名称>商品id>规格id】;* 类型为6是【分类名称>商品id>规格id>开始时间~结束时间】*/private String name;/*** 引用ID,类型为1是0; 类型为2是大类枚举值; 类型为3是子类枚举值;类型为4商品ID;类型为5是规格ID;类型为6是规格ID*/private Long refId;/*** 生效时间,类型为6时有值否则为null,格式yyyy-MM-dd HH:mm:ss*/private Date startDate;/*** 失效时间,类型为6时有值否则为nu,格式yyyy-MM-dd HH:mm:ss*/private Date endDate;/*** 加价类型 1百分比 2固定金额*/private Byte priceType;/*** 加价百分比,当加价类型为1时,该字段有值*/private Integer rate;/*** 加价金额,当加价类型为2时,该字段有值*/private Integer amount;/*** 创建时间*/private Date createTime;/*** 更新时间*/private Date updateTime;/*** 操作人*/private String operator;
}
InvoiceVO(返回主体)
@Data
public class InvoiceVO extends Invoice {//发票编号-子private Long invoiceNo;//发票标题-子private String invoiceTitle;/*** 发票类型-子*/private InvoiceEnum invoiceEnum;//扩展信息private ExtendSub extendSub;@Datapublic static class Extend {//标题-父private String title;//内容-父private String content;}@Datapublic static class ExtendSub extends Extend {//spu集合-子private List<Spu> spuList;//spu信息-子private Spu spu;/*** spu Map-子*/private Map<String, Spu> spuMap;//渠道枚举private SpecialChannelEnum specialChannelEnum;}
}
Invoice (InvoiceVO父类)
package com.peng.model;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.util.Date;@JsonInclude(value = JsonInclude.Include.NON_NULL)//为NULL的字段不返回为(JSON)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName("trade_invoice")
public class Invoice implements Serializable {@TableId(value = "invoice_id", type = IdType.AUTO)private Long invoiceId;/*** 发票抬头类型 1:个人 2:单位*/private Byte invoiceTitleType;/*** 发票类型 1:国内纸质发票 2:国内电子发票 3:国际电子发票*/private Byte invoiceType;/*** 个人名称*/private String name;/*** 单位名称*/private String companyName;/*** 发票状态 1:处理中 2:已开发票*/private Byte status;/*** 纳税人识别号*/private String taxRegisterNumber;/*** 发票编号*/private String invoiceCode;/*** 发票金额*/private Long invoiceAmount;/*** 单位注册地址*/private String registerAddress;/*** 单位注册电话*/private String registerPhone;/*** 开户银行*/private String bankName;/*** 银行卡号*/private String bankNo;/*** 收件人姓名*/private String contactName;/*** 收件人手机号*/private String contactPhone;/*** 收件人地址*/private String contactAddress;/*** 收件人邮箱*/private String contactEmail;/*** 快递单号*/private String expressNo;/*** 快递公司*/private String expressName;/*** 发票电子文件地址*/private String fileUrl;/*** 发票电子文件地址*/private String filePath;/*** 实际供应商id*/private Integer supplierId;/*** ownerId*/private Integer ownerId;/*** userId*/private Integer userId;/*** 备注*/private String remark;/*** 删除标识*/private Boolean yn;/*** 创建时间*/private Date createTime;/*** 更新时间*/private Date updateTime;/*** 创建人*/private String createPin;/*** 更新人*/private String updatePin;}
Spu(InvoiceVO.ExtendSub 依赖)
@Data
public class Spu implements Serializable {private static final long serialVersionUID = 128833531741299945L;/*** 主键ID*/private long id;/*** 商品类别*/private byte productType;/*** 商品子类别*/private int productSubType;/*** spu中文名称*/private String nameCn;/*** spu英文名称*/private String nameEn;/*** poiId,按照poi_id顺序逗号分隔,eg:1,3,12*/private String poiIds;/****** 业务字段 ********//*** 多语言处理后显示的name,v1.5.1新增*/private String name;/*** 创建人*/private String createPin;/*** 更新人*/private String updatePin;//key集合private List<Key> keyList;}
Key (Spu,Key 依赖)
@Data
public class Key implements Serializable {private static final long serialVersionUID = 7585869752216827433L;private Integer pageSize;/*** 要素类别*/private byte type;/*** 要素名称*/private String name;/****** 业务字段 *******//*** 要素名称多语言map* Map<languageCode, value>*/private Map<String, String> names;private List<Key> keyList;
}
生成内容
查看内容
接口说明
名称 | 描述 |
---|---|
功能 | 找不到名字了用这个吧 |
负责人 | 江火似流萤 |
HTTP请求地址
- 地址:
http://domain//v1/test/{userId}
请求方式
- POST
参数说明
请求参数说明
参数名 | 类型 | 必填 | 示例 | 说明 |
---|---|---|---|---|
roleCode | String | - | - | - |
quoteStrategyRule | QuoteStrategyRule | - | - | - |
userId | int | - | - | - |
返回参数说明
参数名 | 类型 | 示例 | 说明 |
---|---|---|---|
code | String | “0” | 状态码(非0为异常情况) |
message | String | 请求成功 | 信息描述 |
data | JsonResult<List<Map<InvoiceVO.Extend,InvoiceVO>>> | - | - |
补充实体说明
QuoteStrategyRule
字段 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
id | Long | - | - | - |
quoteStrategyId | Long | - | - | 所属策略ID |
resellerChannelId | Long | - | - | 所属渠道ID |
quoteStrategyCategory | Byte | - | - | 所属分类 1 生活服务;2 酒店业务;3 飞机票价 |
type | Byte | - | - | 引用ID,类型为1是0; 类型为2是大类枚举值; 类型为3是子类枚举值;类型为4商品ID;类型为5是规格ID;类型为6是规格ID |
name | String | - | - | 类型为1是【分类名称】; 类型为2是【分类名称>大类名称】;, 类型为3是【分类名称>大类名称>子类名称】;, 类型为4是【分类名称>商品id】;类型为5是【分类名称>商品id>规格id】;, 类型为6是【分类名称>商品id>规格id>开始时间~结束时间】 |
refId | Long | - | - | 引用ID,类型为1是0; 类型为2是大类枚举值; 类型为3是子类枚举值;类型为4商品ID;类型为5是规格ID;类型为6是规格ID |
startDate | Date | - | - | 生效时间,类型为6时有值否则为null,格式yyyy-MM-dd HH:mm:ss |
endDate | Date | - | - | 失效时间,类型为6时有值否则为nu,格式yyyy-MM-dd HH:mm:ss |
priceType | Byte | - | - | 加价类型 1百分比 2固定金额 |
rate | Integer | - | - | 加价百分比,当加价类型为1时,该字段有值 |
amount | Integer | - | - | 加价金额,当加价类型为2时,该字段有值 |
createTime | Date | - | - | 创建时间 |
updateTime | Date | - | - | 更新时间 |
operator | String | - | - | 操作人 |
InvoiceVO
字段 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
invoiceId | Long | - | - | - |
invoiceTitleType | Byte | - | - | 发票抬头类型 1:个人 2:单位 |
invoiceType | Byte | - | - | 发票类型 1:国内纸质发票 2:国内电子发票 3:国际电子发票 |
name | String | - | - | 个人名称 |
companyName | String | - | - | 单位名称 |
status | Byte | - | - | 发票状态 1:处理中 2:已开发票 |
taxRegisterNumber | String | - | - | 纳税人识别号 |
invoiceCode | String | - | - | 发票编号 |
invoiceAmount | Long | - | - | 发票金额 |
registerAddress | String | - | - | 单位注册地址 |
registerPhone | String | - | - | 单位注册电话 |
bankName | String | - | - | 开户银行 |
bankNo | String | - | - | 银行卡号 |
contactName | String | - | - | 收件人姓名 |
contactPhone | String | - | - | 收件人手机号 |
contactAddress | String | - | - | 收件人地址 |
contactEmail | String | - | - | 收件人邮箱 |
expressNo | String | - | - | 快递单号 |
expressName | String | - | - | 快递公司 |
fileUrl | String | - | - | 发票电子文件地址 |
filePath | String | - | - | 发票电子文件地址 |
supplierId | Integer | - | - | 实际供应商id |
ownerId | Integer | - | - | ownerId |
userId | Integer | - | - | userId |
remark | String | - | - | 备注 |
yn | Boolean | - | - | 删除标识 |
createTime | Date | - | - | 创建时间 |
updateTime | Date | - | - | 更新时间 |
createPin | String | - | - | 创建人 |
updatePin | String | - | - | 更新人 |
invoiceNo | Long | - | - | 发票编号-子 |
invoiceTitle | String | - | - | 发票标题-子 |
invoiceEnum | InvoiceEnum | - | - | 发票类型-子 |
extendSub | ExtendSub | - | - | 扩展信息 |
JsonResult
字段 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
code | Integer | - | - | code 为"0"则无异常 |
msg | String | - | - | msg |
data | T | - | - | data 返回体对象 |
Extend
字段 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
title | String | - | - | 标题-父 |
content | String | - | - | 内容-父 |
InvoiceEnum
enum InvoiceEnum {PERSON(1, "抬头为个人"),COMPANY(2, "抬头为单位"),BEING(1, "发票状态处理中"),COMPLETE(2, "发票状态已完成"),PAPER(1, "纸质发票"),ELECTRONIC(2, "电子发票");
ExtendSub
字段 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
title | String | - | - | 标题-父 |
content | String | - | - | 内容-父 |
spuList | List<Spu> | - | - | spu集合-子 |
spu | Spu | - | - | spu信息-子 |
spuMap | Map<String,Spu> | - | - | spu Map-子 |
specialChannelEnum | SpecialChannelEnum | - | - | 渠道枚举 |
Spu
字段 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
id | long | - | - | 主键ID |
productType | byte | - | - | 商品类别 |
productSubType | int | - | - | 商品子类别 |
nameCn | String | - | - | spu中文名称 |
nameEn | String | - | - | spu英文名称 |
poiIds | String | - | - | poiId,按照poi_id顺序逗号分隔,eg:1,3,12 |
name | String | - | - | 业务字段 , 多语言处理后显示的name,v1.5.1新增 |
createPin | String | - | - | 创建人 |
updatePin | String | - | - | 更新人 |
keyList | List<Key> | - | - | key集合 |
SpecialChannelEnum
enum SpecialChannelEnum implements CommonEnum{DEFAULT("DEFAULT", "默认渠道"),SASS("SASS", "SASS平台"),UNKNOWN("UNKNOWN", "UNKNOWN"),;
Key
字段 | 类型 | 必填 | 说明 | 备注 |
---|---|---|---|---|
pageSize | Integer | - | - | - |
type | byte | - | - | 要素类别 |
name | String | - | - | 要素名称 |
names | Map<String,String> | - | - | 业务字段 , 要素名称多语言map, Map<languageCode, value> |
keyList | List<Key> | - | - | - |
正则+Python制作一个轻量级接口文档工具相关推荐
- app后端开发一:swagger-ui教程-构建api接口文档工具
声明 之前写过关于app后端开发的一系列文章,那是我第一次做app后端开发,存在很多不足,本想好好修改一下,想想还是重新写吧,这样子也能让我博客文章看起来多一点嘛,万一以后找工作,别人一看我博客这么多 ...
- Popular MVC框架swagger+knif4j接口文档工具使用示例
Popular MVC框架swagger接口文档工具使用示例 简介 此项目介绍如何使用popularmvc内置的swagger+knife4j实现简单易用的实时API文档,支持在线调试接口! 此项目只 ...
- python实现处理swagger接口文档,转换为yaml格式的自动化用例
前言 之前有很多小伙伴反馈,希望我出一期 将swagger文档转换为 yaml格式的自动化用例,那么本期福利来咯~~这一篇文档,将会带领你们实现 如何通过 swagger文档转换为 yaml格式的用例 ...
- springboot 中文文档_比Swagger还好用的自动生成接口文档工具
JApiDocs是一个无需额外注解.开箱即用的SpringBoot接口文档生成工具. 编写和维护API文档这个事情,对于后端程序员来说,是一件恼人但又不得不做的事情,我们都不喜欢写文档,但除非项目前后 ...
- springboot 之 自动生成接口文档工具JApiDocs
JApiDocs是一个无需额外注解.开箱即用的SpringBoot接口文档生成工具 简易使用方法 1.添加依赖 <dependency><groupId>io.github.y ...
- java 接口文档工具_一款Java基于注释的接口文档生成工具
一. 痛点 你还在手动维护接口文档嘛,花一个下午不停的复制粘贴代码里面的注释 接口字段变动,还得去更新文档,更新不及时导致文档不同步 或者你使用了swagger之类的基于注解,依靠运行时的文档工具,看 ...
- 使用smart-doc 做接口文档工具,Controller访问路径中的常量无法替换问题
最近,项目开发中使用 smart-doc 作为接口文档生成工具的使用中,由于请求路径带有常量的问题, 虽然根据 smart-doc官网文档中如何替代请求路径的常量设置替换的方法,但生成的html文中路 ...
- java 非侵入式_Java非侵入式API接口文档工具apigcc用法详解
一个非侵入的api编译.收集.Rest文档生成工具.工具通过分析代码和注释,获取文档信息,生成RestDoc文档 前言 程序员一直以来都有一个烦恼,只想写代码,不想写文档.代码就表达了我的思想和灵魂. ...
- 推荐一个接口文档工具
ShowDoc 转载于:https://www.cnblogs.com/LW-baiyun/p/8003975.html
最新文章
- 使用Numpy实现PCA
- boost::gil模块计算直方图的测试程序
- go 安装墙外的依赖包报错问题
- java 面向对象 重载_Java方法重载
- monkey操作,获取包名,参数,日志,百分比
- vue点餐系统项目总结
- 真随机数 c语言编程,C语言真正获取随机数
- 年薪50万的程序员_2018年这类程序员工资最高!年薪50万只能算一般
- unity全栈开发是什么意思_unity3D用什么语言开发好?
- 查看自己电脑的主板支持多大的内存
- 市值4000亿,超越京东小米!8年奋斗狂奔美团终于上市了
- 如何编辑PDF文件?简单好用的编辑方法分享
- SpringBoot微信小程序商城源码(前台+后台)
- 【最新】Xcode 8 打包教程
- JPEG图像压缩算法流程详解
- 2021全国计算机技术与软件专业技术资格水平考试(软考)网络管理员考试大纲
- .NET程序员的技能分析参考V1.0(有附件)
- 老罗Activity启动流程总结
- 如何把win10的计算机调至桌面,win10如何显示我的电脑在桌面?小编教你显示的方法...
- 战五渣系列之八(绝杀AOP)