接口文档管理解决方案调研及Torna+Smart-doc的使用

文章目录

  • 一、现状
  • 二、需求
  • 三、调研
    • Swagger
      • 官方地址
      • 介绍
    • Knife4j
      • 官方地址
      • 介绍
    • Apifox
      • 官方地址
      • 介绍
    • Smart-doc + Torna
      • 官方地址
      • 介绍
    • EasyYapi + Yapi
      • 官方地址
      • 介绍
  • 四、对比
    • (一)Swagger
      • 1、部署方式
      • 2、优点
      • 3、缺点
      • 4、分享方式
    • (二)Knife4j
      • 1、部署方式
      • 2、优点
      • 3、缺点
      • 4、分享方式
    • (三)Apifox
      • 1、部署方式
      • 2、优点
      • 3、缺点
      • 4、分享方式
    • (四)Smart-doc + Torna
      • 1、部署方式
      • 2、优点
      • 3、缺点
      • 4、分享方式
    • (五)EasyYapi + Yapi
      • 1、部署方式
      • 2、优点
      • 3、缺点
      • 4、分享方式
  • 五、选择与使用
      • 安装部署torna
        • 方式1:下载zip本地运行
        • Linux服务器快速部署
        • 方式2:docker运行
        • docker-compose部署torna
        • kubernetes部署torna
      • 代码集成smart-doc插件实现推送
  • 六、总结

一、现状

目前是通过 swagger + knife4j 的方式集成到微服务项目中,后端同学在开发或修改接口后,需要手动同步维护至公司内部的wiki中供前端和测试同学们查阅。

目前来说,这种现有方式存在如下的几个问题:

  1. 接口调试和在线文档依赖服务的启动。
  2. 现有服务基于k8s,服务是无状态的,无固定IP,文档查看需要配置映射。
  3. 一般开发同学比较习惯使用Markdown语言(.md)撰写文档,但是公司wiki平台不支持导入md文件,因此需要开发同学手动添加wiki,效率过低。
  4. Api更新不及时或未更新。主要由于接口文档依赖于注解的更新,wiki也需要人工进行更新维护,难免发生疏漏。
  5. 公司内部跨部门接口对接时,存在某些接口wiki无权限,需要项管协助开通或者需要我们手动把wiki中的接口文档以word的形式导出,工作效率比较低,并且也存在文档变更不及时通知的场景。
  6. 与第三方对接时,公司内部的wiki由于是内网,而且需要登录。所以文档都是通过word导出的方式,每次接口变更都需要同步修改wiki后,在导出一份word出来提供给第三方。

二、需求

后端同学角度:

  • 减少撰写接口文档上的时间花销,提高工作效率。有这个时间去优化优化代码,优化优化注释不是最好嘛。
  • 现有服务过多,文档不方便集中管理。目前wiki都是按照业务去撰写的,开发在撰写接口文档时,基本上是各写各的,导致wiki目录接口层级比较乱。期望可以有一个更好集中管理文档的平台,方便按照微服务归类。

前端同学角度:

  • 接口文档清晰有条理,格式统一化。现有wiki维护可以说是百花齐放,有些人文档写的比较清晰,有些人就写的很随意。不利于接口对接,影响开发效率。
  • 接口文档最好可以支持Mock与调试。当开发工期短的时候,后端开发只能先把接口定义出来,由于逻辑未完成,所以前端没法进行接口的调试。
  • 文档更新及时。当接口变动某些参数时,可以在文档上很好的体现出来,便于前端同步维护代码。

测试同学角度:

  • 文档的稳定性可以得到保证,持续查阅。由于目前项目组使用的是knife4j的方式,接口文档基于服务的启动,所以在线接口文档非高可用的。
  • 接口文档变更有消息通知与记录
  • 最好可以对接到公司层面的QC平台。

公司角度:

  • 有统一的文档管理平台,各个部门可以很好的协同,同时有较为合理的权限控制
  • 在对接三方公司时,可以很方便的提供接口文档给其他,分享方式灵活多样
  • 文档保证安全性,最好可以在公司层面私有化部署,同时减少成本开销。

三、调研

Swagger

官方地址

https://swagger.io/

介绍

swagger 是一个 api 文档维护组织,后来成为了 Open API 标准的主要定义者,现在最新的版本为17年发布的 Swagger3(Open Api3)。

同时Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务,并于2015年重命名为OpenApi。

Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。

Knife4j

官方地址

https://doc.xiaominfo.com/knife4j/

介绍

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

knife4j的前身是swagger-bootstrap-ui,为了契合微服务的架构发展,由于原来swagger-bootstrap-ui采用的是后端Java代码+前端Ui混合打包的方式,在微服务架构下显的很臃肿,因此项目正式更名为knife4j

Apifox

官方地址

https://www.apifox.cn

文档:https://apifox.com/help/

介绍

Apifox 是集 API 文档、API 调试、API Mock、API 自动化测试多项实用功能为一体的 API 管理平台,定位为 Postman + Swagger + Mock + JMeter。旨在通过一套系统、一份数据,解决多个工具之间的数据同步问题。只需在 Apifox 中定义 API 文档;API 调试、API 数据 Mock、API 自动化测试等功能就可以直接使用,无需再次定义。API 文档和 API 开发调试流程在同一个工具内闭环,API 调试完成后即可确保与 API 文档定义完全一致。高效、及时、准确!

Smart-doc + Torna

官方地址

smart-doc官方网址:https://smart-doc-group.github.io/#/zh-cn/

Torna官方网址:https://www.torna.cn/

在这里插入图片描述

Torna整合smart-doc教程 https://torna.cn/dev/smart-doc.html
在这里插入图片描述

介绍

smart-doc是一款同时支持JAVA REST API和Apache Dubbo RPC接口文档生成的工具,smart-doc在业内率先提出基于JAVA泛型定义推导的理念, 完全基于接口源码来分析生成接口文档,不采用任何注解侵入到业务代码中。你只需要按照java-doc标准编写注释, smart-doc就能帮你生成一个简易明了的Markdown、HTML5、Postman Collection2.0+、OpenAPI 3.0+的文档。

Torna是由smart-doc官方独家推动联合研发的企业级文档管理系统,因此smart-doc官方不会对接其它任何的外部文档管理系统,例如像showdoc、yapi 之类的对接请自定内部处理。

smart-doc是一个文档推导工具,可以根据原生的javadoc及自定义的一些javedoc生成多种格式的接口文档。而Torna是一个文档管理平台,官方提供了很好的聚合方案,例如:使用smart-doc的插件方式(下面会说到)。

EasyYapi + Yapi

官方地址

Yapi: http://yapi.mglicai.com/

Yapi文档: http://hellosean1025.github.io/yapi

EasyYapi:https://easyyapi.com/

介绍

YApi是由去哪儿网移动架构组(简称YMFE,一群由FE、iOS和Android工程师共同组成的最具想象力、创造力和影响力的大前端团队)开发的可视化接口管理工具,是一个可本地部署的、打通前后端及QA的接口管理平台。

YApi旨在为开发、产品和测试人员提供更优雅的接口管理服务,可以帮助开发者轻松创建、发布和维护不同项目,不同平台的API。有了YApi,我们可以很方便的测试、管理和维护多个项目的API接口,不像Swagger那样是随应用生和灭的(且线上环境下大多数须关闭),YApi是一个独立的服务平台。

EasyYapi是一款Idea插件,帮你导出API到YApi、postman、markdown。

Yapi参考安装:https://mp.weixin.qq.com/s?__biz=MzA4ODIyMzEwMg==&mid=2447536869&idx=1&sn=5cf1a994e428312054ff5e015f0a57dd&chksm=843baef4b34c27e2be91e4216f44710f3e40c6b2ac2ea82c27e2eac509ae8330d09dfcf2577e&scene=21#wechat_redirect

EasyYapi的使用参考文档:https://mp.weixin.qq.com/s?__biz=MzA4ODIyMzEwMg==&mid=2447536892&idx=1&sn=b49f4f39ae39c83744f27df29e41a107&chksm=843baeedb34c27fb712b1b21bdd37891ca82249838b87f7aaf042ad9835dcb98ddd21f44c731&cur_album_id=2329480871705296897&scene=189#wechat_redirect

四、对比

(一)Swagger

1、部署方式

本地化部署

2、优点

  • 基于RESTFUL风格
  • 项目集成简单
  • 支持多语言(java,go,python等)

3、缺点

  • 依赖于服务的启动
  • 依赖注解
  • 存在多个服务的时候不便于统一管理
  • 界面比较简单,接口和响应对象分开展示,参数字典对照不方便。
  • 不支持自定义的请求头

4、分享方式

  • 支持openapi分享

(二)Knife4j

1、部署方式

本地化部署

2、优点

  • 在swagger基础上,做了增强,UI更加直观。
  • 比swagger支持了导出markdown,html,word格式的离线文档。
  • 支持自定义的请求头。
  • 支持多种java框架。
  • 有细微的版本控制,识别后端接口的新增与修改。

3、缺点

  • 导出只支持全量导出
  • 功能相对比较单一
  • 依赖于服务的启动
  • 依赖注解
  • 存在多个服务的时候不便于统一管理
  • 个人的开源项目

4、分享方式

  • 支持markdown,html,word,openapi导出。

(三)Apifox

1、部署方式

免费是Saas版,私有版需要付费

2、优点

功能丰富,包括文档管理、接口调试、Mock、接口自动化测试等 商业软件,更新和维护比较稳定。 有桌面版和web版,桌面版功能比较全 免费版可用,基本无限制 方便集成Swagger和Springdoc

3、缺点

免费是Saas版,需要进行定期的账号管理,防止泄露。同时接口的安全风险可能需要进一步考虑

4、分享方式

支持App、网页访问、支持网页分享 支持导出静态文档(但是目前不支持直接导出word)。

(四)Smart-doc + Torna

1、部署方式

国产开源项目,私有化本地部署。支持windows,linux,docker,k8s多种方式。

2、优点

  • smart-doc基于javadoc的方式推导出接口文档,对代码的侵入性低。
  • torna支持smart-doc插件、swagger插件、openapi多种方式集成文档。
  • torna为开源项目,部署成本低。
  • torna的社区相对活跃(亲测!在群里问了一些问题,作者及时响应并答复)
  • torna可以满足目前大多数现有需求场景。
  • torna基于java+vue开发,项目组技术栈相对成熟,方便后续二开。

3、缺点

  • 国产开源项目,存在作者后续不维护的风险。
  • torna目前不支持openAPI的导出方式(不过smart-doc是支持的)

4、分享方式

  • 支持网页分享。可以分享公开链接或带秘钥的私有链接。
  • 支持markdown,html,doc导出。

(五)EasyYapi + Yapi

1、部署方式

支持本地化部署,支持Docker部署

2、优点

功能丰富,包括文档管理、接口调试、Mock。 方便集成Swagger和Springdoc。

Yapi有较为细致的权限管理。

3、缺点

Yapi目前已经不怎么维护更新了,社区活跃度较低

4、分享方式

支持App、网页访问、支持网页分享 支持导出静态文档(但是目前不支持直接导出word)。

五、选择与使用

基于以上的对比,加上目前公司的开发方式,最后选型 smart-doc + Torna实现文档全流程自动化

原因如下:

  1. 使用javadoc注释的方式代替侵入性注解,可以简化代码结构,规范代码注释。
  2. 由于目前微服务过多,需要一个聚合平台统一管理,且文档不依赖于项目的启动。
  3. 国内开源项目,可以本地化部署,安全性能得到保证。
  4. 可以以项目组的形式管理接口,各项目组之间接口互不影响。权限划分细致,便于团队文档可见性管理。
  5. 有丰富的文档导出功能。
  6. 现有项目使用smart-doc的maven插件可以很方便的推送接口文档到torna中,改造成本相对较低。

安装部署torna

方式1:下载zip本地运行

  • 准备工作
    • Java环境,最低要求Java8
    • MySQL,要求5.6.5及以后,5.6.5之前的版本见:支持低版本MySQL

前往 发行版页面 ,下载最新版本,解压zip

导入数据库,执行mysql.sql

打开application.properties配置文件,修改数据库连接配置

执行sh startup.sh启动(Windows执行startup.bat

访问:http://ip:7700

  • 登录账号:

用户名:admin,密码:123456
在这里插入图片描述

  • 后续升级

无特殊说明,只需要覆盖torna.jar文件dist文件夹,然后重启即可

Linux服务器快速部署

  • 前提:导入数据库,执行mysql.sql

创建配置文件,执行命令:

mkdir /etc/torna && wget https://gitee.com/durcframework/torna/raw/master/install/application.properties -O /etc/torna/application.properties

vim /etc/torna/application.properties修改数据库连接配置

拉取最新版本并启动,以1.21.0为例

wget https://gitee.com/durcframework/torna/raw/master/install/restart-torna.sh && sh restart-torna.sh 1.21.0

后续更新版本只需执行sh restart-torna.sh 版本号

方式2:docker运行

导入数据库,执行mysql.sql

下载公共镜像

docker pull tanghc2020/torna:1.21.0

创建配置文件,执行命令:

mkdir /etc/torna && wget https://gitee.com/durcframework/torna/raw/master/install/application.properties -O /etc/torna/application.properties

vim /etc/torna/application.properties修改数据库连接配置

执行docker命令:

docker run --name torna --restart=always \
  -p 7700:7700 \
  -e JAVA_OPTS="-server -Xms512m -Xmx512m" \
  -v /etc/torna/application.properties:/torna/config/application.properties \
  -d tanghc2020/torna:1.21.0

浏览器访问http://ip:7700,ip对应docker宿主机器ip,非docker容器ip

运维脚本

docker-compose部署torna

【docker-compose方式部署torna】

kubernetes部署torna

【kubernetes部署torna】

代码集成smart-doc插件实现推送

  1. 先在torna上创建对应的应用

在这里插入图片描述

  1. 在代码里,pom.xml添加smart-doc的maven插件
<!-- smart-doc插件 -->
<plugin>
    <groupId>com.github.shalousun</groupId>
    <artifactId>smart-doc-maven-plugin</artifactId>
    <version>2.4.9</version>
    <configuration>
        <!--指定生成文档的使用的配置文件-->
        <configFile>${basedir}/src/main/resources/smart-doc.json</configFile>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
        </execution>
    </executions>
</plugin>

在这里插入图片描述

  1. 在代码/resources目录下添加smart-doc.json文件,并且修改配置。
{
  "outPath": "target/doc",
  "projectName": "torna-test",
  "packageFilters": "com.tmzh.apidoc.torna.web.controller.*",
  "openUrl": "http://localhost:7700/api",
  "appToken": "7af425085ee94d7d8b74d4074e51af32",
  "debugEnvName":"本地环境",
  "debugEnvUrl":"http://127.0.0.1:8080",
  "tornaDebug": true,
  "replace": true
}

参数说明:

  • outPath:固定填这个不用变
  • projectName:项目名称
  • packageFilters:Controller接口对应的package目录,多个用,隔开
  • openUrl:Torna中的OpenAPI接口
  • appToken:Torna中的OpenAPI token
  • debugEnvName:Torna中调试环境名称
  • debugEnvUrl:Torna中调试环境地址
  • tornaDebug:是否开启调试,初次使用建议开始,后面稳定了关闭
  • replace:是否替换文档,建议true

这里是快速配置,完整版的配置参考:https://smart-doc-group.github.io/#/zh-cn/diy/config

  1. 参考smart-doc中javadoc规范,对代码进行规范化注释。

参考:https://smart-doc-group.github.io/#/zh-cn/start/javadoc

smart-doc支持的原生javadoc:

tag名称使用描述
@param对于在Spring Boot接口层,对于简单类型的参数必须在使用@param时写上注释描述,对于Entity类型smart-doc则不会检查
@deprecated可以在注释中用于标记接口已经废弃,作用同@Deprecated注解
@apiNote@apiNoteJAVA新增的文档tag,smart-doc使用@apiNote的注释作为方法的详细描述,因此可以使用@apiNote来写一段长注释。如果一个方法不写 @apiNote注释说明,smart-doc直接使用方法默认注释填充
@authorsmart-doc会提取代码中@author标注到文档中,@author可以写在方法上也可以写到类上。例如:@author sunyu on 2016/12/6.

smart-doc自定义Tag:

tag名称描述
@ignore@ignore 如果@ignore加到方法上,则接口方法不会输出到文档。从1.8.4开始@ignore支持添加到Controller上进行忽略不想生成文档的接口类。@ignore也可以用于方法上忽略某个请求参数。
@required如果你没有使用JSR303参数验证规范实现的方式来标注字段,就可以使用@required去标注请求参数对象的字段,标注smart-doc在输出参数列表时会设置为true。【不建议使用,以后会删除】
@mocksmart-doc 1.8.0开始,@mock tag用于在对象基本类型字段设置自定义文档展示值。设置值后smart-doc不再帮你生成随机值。方便可以通过smart-doc直接输出交付文档。
@dubbosmart-doc 1.8.7开始,@dubbo tag用于在DubboAPI接口类上添加让smart-doc可以扫描到Dubbo RPC的接口生成文档。
@restApismart-doc 1.8.8开始,@restApi tag用于支持smart-doc去扫描Spring Cloud Feign的定义接口生成文档。
@ordersmart-doc 1.9.4开始,@order tag用于设置Controller接口或者API入口的自定义排序序号,@order 1就表示设置序号为1
@ignoreResponseBodyAdvicesmart-doc 1.9.8开始,@ignoreResponseBodyAdvice tag用于忽略ResponseBodyAdvice设置的包装类。
@downloadsmart-doc 2.0.1开始,@download tag用于标注在Controller的文件下载方法上,生成debug页面时可实现文件下载测试。并且支持下载文件带请求头参数测试。
@pagesmart-doc 2.0.2开始,@page tag用于标注在Controller的方法上表示该方法用来渲染返回一个静态页面,生成debug页面时如果发起测试,测试页面会自动在浏览器开启新标签显示页面。
@ignoreParamssmart-doc 2.1.0开始,@ignoreParams tag用于标注在Controller方法上忽略掉不想显示在文档中的参数,例如:@ignoreParams id name,多个参数名用空格隔开
@responsesmart-doc 2.2.0开始,@response tag标注在Controller方法上可以允许用这自己定义返回的json example。建议只在返回基础类型时使用,如:Result类型这种泛型是简单原生类型的响应。
@tag@since 2.2.5, @tag用于将Controller方法分类, 可以将不同Contoller下的方法指定到多个分类下, 同时也可以直接指定Controller为一个分类或多个分类,【不要使用,不支持,直接用分组配置代替】
  1. 双击右侧maven插件栏中的smart-doc:torna-rest实现文档推送,当然也可以使用maven的命令行模式,如下
mvn -Dfile.encoding=UTF-8 smart-doc:torna-rest -pl :torna-test -am
## 其中-pl :torna-test -am表示推送哪个子模块

对于maven多模块项目,推荐使用命令行的形式,推送某个具体的服务至torna。可以参考:

maven多模块中使用插件 示例如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、总结

  • 建议使用统一的分支进行文档推送

  • 后面文档稳定了,建议关闭smart-doc.json中的replace,防止文档误操作变更。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VS+Qt 自定义Dialog

与QtCreator不同&#xff0c;刚用VS添加Qt Dialog界面有点懵&#xff0c;后整理了下&#xff1a; 1.右击项目&#xff0c;选择“添加-模块”&#xff0c;然后选择“Qt-Qt Widgets Class” 2.选择基类[1]QDialog,更改[2]ui文件名称&#xff0c;修改定义Dialog[3]对应类名&#…

学习Linux的注意事项(使用经验;目录作用;服务器注意事项)

本篇分享学习Linux过程中的一些经验 文章目录 1. Linux系统的使用经验2. Linux各目录的作用3. 服务器注意事项 1. Linux系统的使用经验 Linux严格区分大小写Linux中所有内容以文件形式保存&#xff0c;包括硬件&#xff0c;Linux是以管理文件的方式操作硬件 硬盘文件是/dev/s…

第4篇:vscode+platformio搭建esp32 arduino开发环境

第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 1.配置默认安装路径&#xff0c;安装到D盘。 打开环境变量&#xff0c;点击新建 输入变量名PLATFORMIO_CORE_DIR与路径&#xff1a;D:\PLATF…

SpringBoot案例-配置文件-@ConfigurationProperties

问题分析 在往期的配置参数的文章中&#xff0c;对于阿里云OSS的参数时设置在yml配置文件中&#xff0c;然后使用Value&#xff08;”${}“&#xff09;对参数进行赋值&#xff0c;具体如下&#xff1a; 此种方法比较繁琐 问题解决 使用注解 Data 为变量自动生成get/set方…

游戏反外挂方案解析

近年来&#xff0c;游戏市场高速发展&#xff0c;随之而来的还有图谋利益的游戏黑产。在利益吸引下&#xff0c;游戏黑产扩张迅猛&#xff0c;已发展成具有庞大规模的产业链&#xff0c;市面上游戏受其侵扰的案例屡见不鲜。 据《FairGuard游戏安全2022年度报告》数据统计&…

IP协议报文结构

IP报文结构 4位版本号: 指定IP协议的版本, 对于IPv4来说, 就是4.4位头部长度: IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节.8位服务类型: 3位优先权字段(已经弃用) 4位TOS字段 1位保留字段(必须置为0). 4位…

C语言练习1(巩固提升)

C语言练习1 选择题 前言 “人生在勤&#xff0c;勤则不匮。”幸福不会从天降&#xff0c;美好生活靠劳动创造。全面建成小康社会的奋斗目标&#xff0c;为广大劳动群众指明了光明的未来&#xff1b;全面建成小康社会的历史任务&#xff0c;为广大劳动群众赋予了光荣的使命&…

缓存的设计方式

问题情况&#xff1a; 当有大量的请求到内部系统时&#xff0c;若每一个请求都需要我们操作数据库&#xff0c;例如查询操作&#xff0c;那么对于那种数据基本不怎么变动的数据来说&#xff0c;每一次都去数据库里面查询&#xff0c;是很消耗我们的性能 尤其是对于在海量数据…

和鲸 ModelWhale 与中科可控多款服务器完成适配认证,赋能中国云生态

当前世界正处于新一轮技术革命及传统产业数字化转型的关键期&#xff0c;云计算作为重要的技术底座&#xff0c;其产业发展与产业规模对我国数字经济的高质量运行有着不可取代的推动作用。而随着我国数字上云、企业上云加快进入常规化阶段&#xff0c;云计算承载的业务应用越来…

VBA技术资料MF44:VBA_把数据从剪贴板粘贴到Excel

【分享成果&#xff0c;随喜正能量】人皆知以食愈饥&#xff0c;莫知以学愈愚,生命中所有的不期而遇都是你努力的惊喜.人越纯粹&#xff0c;就越能感受到美。大江、大河、大海、大山、大自然&#xff0c;这些风景从来都不会受“属于谁”的污染&#xff0c;人人都感受到它们的美…

解密长短时记忆网络(LSTM):从理论到PyTorch实战演示

目录 1. LSTM的背景人工神经网络的进化循环神经网络&#xff08;RNN&#xff09;的局限性LSTM的提出背景 2. LSTM的基础理论2.1 LSTM的数学原理遗忘门&#xff08;Forget Gate&#xff09;输入门&#xff08;Input Gate&#xff09;记忆单元&#xff08;Cell State&#xff09;…

正则中常见的流派及其特性

目前正则表达式主要有两大流派&#xff08;Flavor&#xff09;&#xff1a;POSIX 流派与 PCRE 流派。 1、 POSIX 流派 POSIX 规范定义了正则表达式的两种标准&#xff1a; BRE 标准&#xff08;Basic Regular Expression 基本正则表达式&#xff09;&#xff1b;ERE 标准&am…

探索PDF校对:为何这是现代数字文档的关键步骤

在今日的数字化浪潮中&#xff0c;文档的创建与分享从未如此频繁。尤其是PDF&#xff0c;作为一个普遍接受的标准文件格式&#xff0c;其在企业、学术和日常生活中的应用已经无处不在。但随之而来的挑战是如何确保文档的准确性和专业性。让我们深入探索PDF校对的重要性以及它为…

微服务流程引擎:简单又灵活,实现流程全生命周期管理!

伴随着日益激烈的市场竞争&#xff0c;传统的办公操作已经无法满足发展需要了。如果采用微服务流程引擎加油助力&#xff0c;就可以帮助企业更好地管理数据资源&#xff0c;高效做好各种表单制作&#xff0c;实现高效率办公。流辰信息以市场为导向&#xff0c;用心钻研低代码技…

鸡肋的RDP反制

更新时间&#xff1a;2023年07月19日09:18:29 为什么叫鸡肋&#xff1a; 鸡肋者&#xff0c;食之无肉&#xff0c;弃之有味。 你说不能成吧&#xff0c;但是有成功案例&#xff0c;你说成了吧&#xff0c;要求太高&#xff0c;还要看运气的。 一句话&#xff1a;对方需要开启…

linux iptables安全技术与防火墙

linux iptables安全技术与防火墙 1、iptables防火墙基本介绍1.1netfilter/iptables关系1.2iptables防火墙默认规则表、链结构 2、iptables的四表五链2.1四表2.2五链2.3四表五链总结2.3.1 规则链之间的匹配顺序2.3.2 规则链内的匹配顺序 3、iptables的配置3.1iptables的安装3.2i…

【算法刷题之链表篇(2)】

目录 1.leetcode-23. 合并 K 个升序链表&#xff08;较难&#xff09;&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;方法一&#xff1a;顺序合并&#xff08;3&#xff09;方法二&#xff1a;分治合并&#xff08;4&#xff09;方法三&#xff1a;使用优先队列合…

MySQL高级篇——MySQL架构篇3(用户与权限管理)

目录 1 用户管理1.1 登录MySQL服务器1.2 创建用户1.3 修改用户1.4 删除用户1.5 设置当前用户密码1.6 修改其它用户密码1.7 MySQL8密码管理(了解) 2 权限管理2.1 权限列表2.2 授予权限的原则2.3 授予权限2.4 查看权限2.5 收回权限 3 权限表3.1 user表3.2 db表3.3 tables_priv表和…

【MyBatis】:PageHelper分页插件与特殊字符处理

目录 一、PageHelper介绍 二、PageHelper使用 1. 导入pom依赖 2. Mybatis.cfg.xml 配置拦截器 3. 配置 Mapper.xml 4. 编写测试 三、特殊字符处理 1. 使用转义字符 2. 使用CDATA 区段 一、PageHelper介绍 PageHelper 是 Mybatis 的一个插件&#xff0c;这里就不扯了&a…

【sql】MongoDB 增删改查 高级用法

【sql】MongoDB 增删改查 高级用法 相关使用文档 MongoDB Query API — MongoDB Manual https://www.mongodb.com/docs/manual/reference/sql-comparison //增 //新增数据2种方式 db.msg.save({"name":"springboot&#x1f600;"}); db.msg.insert({&qu…