idea同步yapi插件

1、前言

yapi是一个很好的接口文档维护工具,其swagger功能,可将接口信息同步到yapi平台上,但是swagger的编写,大量入侵代码,也加大了开发工作量,目前调研了idea集成yapi同步工具,无需嵌入式编写入侵代码,根据javadoc备注即可将接口信息同步到yapi同台上

2、idea同步yapi平台工具

Idea支持将接口文档同步到yapi目前找到三个,easyapi、YapiUpload、idea yapi

  • easyapi:同步接口信息到postman以及yapi平台上,但是同步yapi的不支持多模块同步;
  • YapiUpload:同步yapi的配置需要写配置文件,不利于维护;
  • idea yapi:是基于YapiUpload的二次开发,将原有xml配置方式改为 Setting 中配置,并配置持久化,将原本上传的数据类型做了优化,上传后数据类型为js的数据类型。

综上优缺点,可采用idea yapi,如果有特殊需求可安装easyapi同步到postman进行接口调试

3、idea-yapi安装步骤

3.1、安装idea-yapi

在idea-Preferences-Plugins中搜索idea-yapi,安装,并重启idea
在这里插入图片描述

3.2、配置idea-yapi

在idea-Preferences-Other Setting中找到YapiSetting
配置说明如下:在这里插入图片描述
如果你是项目只是同步dubbo/api,采用如下配置

{"isSingle": true,"singleConfig": {"projectToken": "yapi平台的项目token地址","projectId": "yapi平台的项目id","yApiUrl": "yapi平台平台地址","menu": "同步到的接口的目录","projectType": "你的接口类型或者dubbo"},"multipleConfig": {"api": {"projectToken": "","projectId": "","yApiUrl": "","menu": "","projectType": ""},"api": {"projectToken": "","projectId": "","yApiUrl": "","menu": "","projectType": ""}}
}

如果你是项目即同步dubbo又有api,采用如下配置

{"isSingle": false,"singleConfig": {"projectToken": "","projectId": "","yApiUrl": "","menu": "","projectType": ""},"multipleConfig": {"接口所在包名称: {"projectToken": "yapi平台的项目token地址","projectId": "yapi平台的项目id","yApiUrl": "yapi平台平台地址","menu": "api接口文档","projectType": "api"},"dubbo所在包名称": {"projectToken": "yapi平台的项目token地址","projectId": "yapi平台的项目id","yApiUrl": "yapi平台平台地址","menu": "dubbo文档","projectType": "dubbo"}}
}

备注:查找token以及项目id的目录
在这里插入图片描述

3.3、同步接口或者dubbo

找到对应的接口所在的方法入口或者dubbbo的定义方法,即可
比如:同步下面的接口
在这里插入图片描述
效果如下:
在这里插入图片描述

4、idea-yapi支持规则配置以及实例

4.1、规则配置

1:插件如何生成属性备注 ,通过获得字段备注中的注释

/** 
* 年龄
*/
private Integer age;

2:插件如何生成接口名称,通过接口上的注释,或者引用上的 注释

/*** 添加或更新课程数据** @param courseOpt* @return {@link CommonRes}*/@RequestMapping(value = "/test", method = RequestMethod.POST)public Course addOrUpdateCourse(@RequestBody CourseParam courseParam){}/*** @description: 添加或更新课程数据  (@Description 也可)* @param: [CourseParam]* @return: Course* @date: 2018/3/15*/@RequestMapping(value = "/test", method = RequestMethod.POST)public Course addOrUpdateCourse(@RequestBody CourseParam courseParam){}@RequestMapping(value = ICourse.ADD_OR_UPDATA_COURSE, method = RequestMethod.POST)public Course addOrUpdateCourse(@RequestBody CourseParam courseParam){}public interface  ICourse{/*** @description: 添加或更新课程数据  (@Description 也可)* @param: [CourseParam]*/ADD_OR_UPDATA_COURSE="test";}

3:@link 参数定义展示在字段备注中
第一种@link 方式

/** 
* 状态 {@link com.xxx.constant.StatusConstant}
*/
private Integer status;

第二种@link 方式

import com.xxx.constant.StatusConstant;/** 
* 状态 {@link StatusConstant}
*/
private Integer status;

不支持方式

import com.xxx.constant.*;/** 
* 状态 {@link StatusConstant}
*/
private Integer status;

4:实现自定义分类
通过在方法或类注释中加 @menu 注释实现,优先级 方法>类>package 下面或者上面的@menu,如果没有自定义 默认为tool-tmp,支持多级分类(多级分类只能是crazy 分支的yapi)

package com.project.demo;
/** * @menu 这里填写类分类名称*/
import com......
/** *@description: 用户控制器*@menu 这里填写类分类名称*/   
@RestController
public class UserController {/*** @description: 新增用户* @param: [User]* @menu: 这里填写方法级别分类名称(比如 多级目录/menu/menu1/menu2)* @return: Response<UserDTO>* @date: 2018/3/15*/@RequestMapping(value = "/addUser", method = RequestMethod.POST)public Response<UserDTO> addUser(@RequestBody User user){}
}

5:支持注解

  String RequestMapping="org.springframework.web.bind.annotation.RequestMapping";String GetMapping="org.springframework.web.bind.annotation.GetMapping";String PostMapping="org.springframework.web.bind.annotation.PostMapping";String PutMapping="org.springframework.web.bind.annotation.PutMapping";String DeleteMapping="org.springframework.web.bind.annotation.PutMapping.DeleteMapping";String PatchMapping="org.springframework.web.bind.annotation.PutMapping.PatchMapping";String RequestBody="org.springframework.web.bind.annotation.RequestBody";String RequestParam="org.springframework.web.bind.annotation.RequestParam";String RequestHeader="org.springframework.web.bind.annotation.RequestHeader";String RequestAttribute="org.springframework.web.bind.annotation.RequestAttribute";String PathVariable="org.springframework.web.bind.annotation.PathVariable";String NotNull="javax.validation.constraints.NotNull";String NotEmpty="javax.validation.constraints.NotEmpty";String NotBlank="javax.validation.constraints.NotBlank";

支持Request Param 注解
生成的 uid 和bid 备注为 用户id(Integer),baby id(Integer) 如果没有备注,则只有(Integer)

   /*** 测试RequestHeader desc 规范的多个* @param uid 用户id* @param bid baby id* @param request* @param response*/@RequestMapping(value = "/testRequestDesc4")public void testRequestDesc4(@RequestHeader(name = "uid")Integer uid, @RequestParam(name = "bid")Integer bid, HttpServletRequest request, HttpServletResponse response){}

支持@status注解
支持已发布(done),设计中(design),开发中(undone),已提测(testing),已过时(deprecated),暂停开发(stoping),支持中英文 (crazy 分支),新增接口默认 开发中,更新时如果没有写status情况下默认使用当前状态

   /*** 测试RequestHeader desc 规范的多个* @param uid 用户id* @status 开发中 (或者 undone)* @param request* @param response*/@RequestMapping(value = "/testRequestDesc4")public void testRequestDesc4(@RequestHeader(name = "uid")Integer uid, @RequestParam(name = "bid")Integer bid, HttpServletRequest request, HttpServletResponse response){}

6:项目中通过fitler或拦截器或注解等 实现全局统一响应对象 返回如何处理
在misc.xml 中配置 returnClass ,值为全局统一响应对象全路径。比如下面代码如果配置了returnClass 为GlobalResponse ,那么他生成的yapi 响应对象为,GlobalResponse

   /*** 测试RequestHeader desc 规范的多个* @param uid 用户id* @status 开发中 (或者 undone)* @param request* @param response*/@RequestMapping(value = "/testRequestDesc4")public Integer testRequestDesc4(@RequestHeader(name = "uid")Integer uid, @RequestParam(name = "bid")Integer bid, HttpServletRequest request, HttpServletResponse response){}public class GlobalResponse<T> {private String status;private String code;private T data;......
}

7:swagger 支持
目前1.7.7以上支持以下注解

  String API_OPERATION = "io.swagger.annotations.ApiOperation";String API_MODEL_PROPERTY = "io.swagger.annotations.ApiModelProperty";String API_PARAM = "io.swagger.annotations.ApiParam";

4.2、实例

4.2.1、get方式

        /*** get方式** @param param1 参数1的名称或描述* @param param2 参数2的名称或描述* @param param3 参数3的名称或描述* @return 响应描述* @author 苏叶* @date 2019-12-29 17:24*/@RequestMapping(value = "/pathOfApi1", method = RequestMethod.GET)public Response<GuideResult> methodName1(@RequestParam String param1,@RequestParam String param2,@RequestParam(required = false, defaultValue = "android") String param3) {return new Response<GuideResult>();}

效果
在这里插入图片描述

4.2.2、Post方式

       /*** post方式** @param jsonModel 入参数* @return 通用返回* @author 苏叶* @date 2019-12-29 17:20*/@Deprecated@RequestMapping(value = "/pathOfApi2", method = RequestMethod.POST)public Response methodName2(@RequestBody MockDtoOrVo jsonModel) {return new Response();}

MockDtoOrVo 入参

/*** moke说明** @author 苏叶* @version 1.0* @date 2019-12-29 16:58*/
@Data
@ToString
public class MockDtoOrVo {/*** 字段注释*/private Long field1;/*** 字段注释*/private Double field2;/*** 某个枚举* {@link com.kaishustory.userx.common.constant.ClientForm}*/private int field3;/*** 当目标枚举字段与当前字段名不一致,额外指定** @see com.kaishustory.userx.common.constant.ClientForm#ANDROID*/private int field4;/*** 可以用注解`@Deprecated`来表示字段被废弃* 也可以用注释`@deprecated`** @deprecated It's a secret*/@Deprecatedprivate int field5;/*** 如果使用javax.validation的话* 可以使用@NotBlank/@NotNull表示字段必须*/@NotBlank@NotNullprivate String field6;}

效果
在这里插入图片描述

5、EasyApi安装步骤

5.1、安装EasyApi

在idea-Preferences-Plugins中搜索easyapi,安装,并重启idea
在这里插入图片描述

5.2、创建postmantoken获取token

在这里插入图片描述

5.3、配置easyapi导出postman

在这里插入图片描述

5.4、项目配置

.easy.api.yml
实例在moudle下面配置如下
在这里插入图片描述
在对应的controller文件右键-genernate - export postman,即可在这里插入图片描述生成对应目录的请求配置

具体的方法注释:
https://github.com/diwand/YapiIdeaUploadPlugin/wiki/%E5%BF%AB%E9%80%9F%E4%BD%BF%E7%94%A8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/827968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

背靠TON公链的Notcoin游戏项目,能否杀出GameFi的红海?

4月15日消息&#xff0c;Telegram生态中的游戏及Meme项目Notcoin&#xff0c;最近在X平台公布了令市场瞩目的代币经济学方案。据悉&#xff0c;NOT的总供应量高达1027亿枚&#xff0c;其中78%将分配给矿工和Voucher持有者&#xff0c;余下的22%预留给未来新用户、交易者及各类上…

LLM 为什么需要 tokenizer?

文章目录 1. LLM 预训练目的1.1 什么是语言模型 2. Tokenizer一般处理流程&#xff08;了解&#xff09;3. 进行 Tokenizer 的原因3.1 one-hot 的问题3.2 词嵌入 1. LLM 预训练目的 我们必须知道一个预训练目的&#xff1a;LLM 的预训练是为了建立语言模型。 1.1 什么是语言模…

精度论文Generative Prompt Model for Weakly Supervised Object Localization

Generative Prompt Model for Weakly Supervised Object Localization 中国科学院大学&&浙江大学CVPR20231.Abstract 当从图像类别标签中学习对象定位模型时,弱监督对象定位(WSOL)仍然具有挑战性, 传统的鉴别训练激活模型的方法忽略了具有代表性但鉴别性较差的对象…

【UE 材质】雨滴效果

在上一篇博客&#xff08;【UE 材质】表面湿润效果&#xff09;的基础上继续实现物体表面附加雨滴的效果 效果 步骤 1. 下载所需纹理 2. 创建一个材质并打开&#xff0c;添加如下节点&#xff0c;我们将纹理的RG通道输出的值和1组成一个三维向量&#xff0c;作为基本的法线效…

SAP 变更记录表查询使用逻辑简介

通常用户在遇到问题后&#xff0c;经常会问某个单据的变更记录&#xff0c;很多模块中在前台的操作界面中都根据对应的菜单栏中可以找到对应的变更记录&#xff0c;像销售订单、交货单、采购申请、采购订单都在菜单栏位中都可以查询到对应的修改记录&#xff0c;但是对于想批量…

CentOS-7安装Mysql并允许其他主机登录

一、通用设置&#xff08;分别在4台虚拟机设置&#xff09; 1、配置主机名 hostnamectl set-hostname --static 主机名2、修改hosts文件 vim /etc/hosts 输入&#xff1a; 192.168.15.129 master 192.168.15.133 node1 192.168.15.134 node2 192.168.15.136 node33、 保持服…

揭秘APP广告变现秘籍:月入过万!

在移动应用的黄金时代&#xff0c;我们见证了无数创新和变革。然而&#xff0c;随着市场日益饱和&#xff0c;开发者和公司开始寻求新的方式来提高收益&#xff0c;而广告变现无疑是其中的关键。 对于移动应用来说&#xff0c;如何高效利用APP内的用户体验来提高广告收益是一个…

Python11个入门级知识点

Python被誉为全世界高效的编程语言&#xff0c;同时也被称作是“胶水语言”&#xff0c;那它为何能如此受欢迎&#xff0c;下面我们就来说说Python入门学习的必备11个知识点&#xff0c;也就是它为何能够如此受欢迎的原因. Python 简介 Python 是一个高层次的结合了解释性、编…

【1431】java学习网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 学习网站系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

【VSCode调试技巧】Pytorch分布式训练调试

最近遇到个头疼的问题&#xff0c;对于单机多卡的训练脚本&#xff0c;不知道如何使用VSCode进行Debug。 解决方案&#xff1a; 1、找到控制分布式训练的启动脚本&#xff0c;在自己的虚拟环境的/lib/python3.9/site-packages/torch/distributed/launch.py中 2、配置launch.…

【Java框架】SpringBoot(二)核心配置

目录 yml文件什么是yml文件yml文件的优点使用场景脚本语言序列化配置文件 yml的基本语法yml支持的数据类型字面量对象(属性和值)、Map(键值对)数组复合结构 Spring Boot配置文件的值注入第一种读取方式Value第二种读取方式ConfigurationProperties第三种读取方式自动装配Enviro…

【Linux】详解信号的分类如何自定义信号的作用

一、信号的定义 Linux系统提供的让用户(进程)给其他进程发送异步信息的一种方式。在操作系统中&#xff0c;信号是一种进程间通讯的有限制的方式&#xff0c;主要用于提醒进程某个事件已经发生。信号在Unix、类Unix以及其他POSIX兼容的操作系统中广泛应用。它作为一种异步的通知…

【DVadmin教程】新增一个app并且创建一个curd模型

下载dvadmin 在gitee上搜索 django-vue-admin 别选错了&#xff0c;选择那个星最多的 gitee上会推荐移步 django-vue3-admin 别上当&#xff0c;用那个会踩坑&#xff0c;此教程就不适用了&#xff1b; 运行后端 后端 创建APP python manage.py startapp rules调整位置 为了…

java学习笔记1

java基础入门 1 初识java 1.1 jdk安装 1.1.1 下载jdk https://www.oracle.com/java/technologies/downloads/#java8-windows1.1.2 安装jdk jdk-8u361-windows-x64.exe安装到D:\Program Files\Java\jdk1.8.0_361安装jre,修改地址到D:\Program Files\Java\jre1.8.0_361jdk安装…

【JAVA进阶篇教学】第二篇:JDK8中Lambda表达式

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第二篇&#xff1a;JDK8中Lambda表达式。 Lambda 表达式是 Java 8 中引入的一项重要特性&#xff0c;它允许您以更简洁、更紧凑的方式编写匿名函数。Lambda 表达式使得函数式编程在 Java 中变得更加容易和优雅。下面我将…

C++|模板进阶(非类型模板参数+特化)

目录 一、非类型模板参数 二、模板特化 2.1函数模板特化 2.2类模板特化 2.2.1全特化 2.2.2偏特化 三、模板不支持分离编译 四、模板优缺点 一、非类型模板参数 在模板初阶中&#xff0c;所学习的模板的参数是类型形参&#xff0c;但其实还有非类型形参。 类型形参&am…

boa.conf配置详解

boa的配置文件路径&#xff1a;/etc/boa/boa.conf Port 80 # 监听的端口号&#xff0c;缺省值是80 若80被占用&#xff0c;可修改监听端口为其他未占用端口&#xff08;如&#xff1a;88&#xff09; Listen 192.68.0.5 # 绑定调用的IP地址&#xff0c;一般注释掉&#xff0c;…

汇编期末复习知识点

参考文献1 第一章 概述 组成 计算机系统由硬件子系统和软件子系统组成。硬件子系统&#xff1a;组成计算机系统的所有电子的&#xff0c;机械的&#xff0c;光学的和磁性的元部件。 计算机中常用进制数表示 十进制(Decimal):数据尾部加一后缀D&#xff0c;如2355D二进制&a…

nginx配置挂载html

目标 很多软件的官方文档&#xff0c;在国内打开很慢&#xff0c;每次都得等很久&#xff0c;看到官方同时提供了html的包&#xff0c;所以想着挂载到本地nginx下&#xff0c;查看会方便很多。 下载官方html文档包&#xff0c;解压到documentation_htmls下 想添加新的文档也是…

Golang基础3-函数、nil相关

函数 需要声明原型支持不定参数 func sum(numbers ...int)int支持返回多值支持递归支持命名返回参数 // 命名返回参数 func add(a, b int) (sum int) {sum a breturn // 这里不需要显式地写出返回值&#xff0c;因为已经在函数签名中声明了命名返回参数 } 支持匿名函数、闭包…