Code Monkey home page Code Monkey logo

knife4j's Introduction

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

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

更名后主要专注的方面

  • 前后端Java代码以及前端Ui模块进行分离,在微服务架构下使用更加灵活
  • 提供专注于Swagger的增强解决方案,不同于只是改善增强前端Ui部分
  • 提供更多灵活的中间件方案\工具

项目模块

目前仓库主要的模块说明:

模块名称 说明
knife4j 为Java MVC框架集成Swagger的增强解决方案,Java生态下的中间件封装
knife4j-insight 开箱即用的独立解决方案,提供官方Docker镜像,基于Spring Boot 3.0编写,查看使用文档
knife4j-doc knife4j官方文档,基于Docusaurus编写,参与贡献请参考文档
knife4j-vue 当前Knife4j的前端源码,基于Vue2.0编写
knife4j-vue3 当前Knife4j的前端源码,基于Vue3.0编写,该代码库来自贡献者,目前尚未投入使用
knife4j-front knife4j的前端架构代码,目前是规划阶段,该模块尚未编码,有想法的可以通过交流群与作者沟通

获取帮助

官网文档: https://doc.xiaominfo.com/

预览地址: https://doc.xiaominfo.com/demo/doc.html

Demo示例: https://gitee.com/xiaoym/swagger-bootstrap-ui-demo

Demo说明: https://doc.xiaominfo.com/docs/action/action-simple

作者交流: 关注公众号"Knife4j",点击菜单“交流群”获取加群二维码

输入图片说明

特别声明

不管是knife4j还是swagger-bootstrap-ui

对外提供的地址依然是doc.html

访问:http://ip:port/doc.html

即可查看文档

这是永远不会改变的

界面效果

接口说明

接口调试

🤝 特别鸣谢

  • 感谢 JetBrains 提供的免费开源 License:

💪 Contributors 💪

Our contributors have made this project possible. Thank you! 🙏

Made with contrib.rocks.

Star History Chart

knife4j's People

Contributors

1224473361 avatar 12266601032 avatar 1990lsf avatar 4379711 avatar a3538333 avatar bldx123 avatar bluesword12350 avatar dependabot[bot] avatar galaxy-sea avatar ghostg00 avatar huangmiao avatar initchen avatar lcxw avatar lhzsdnu avatar linghengqian avatar llleno avatar luoyunchong avatar lvguangzeng avatar moil-xm avatar sky-0914 avatar wearzdk avatar web-xiaxia avatar wll8 avatar x403368945 avatar xander-os avatar xiaoymin avatar xjinyao avatar xksgs avatar zpf124 avatar zuihou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

knife4j's Issues

不能正确解析response内非$ref的schema内容。

使用版本1.8.7

案例:

{
  "get": {
    "summary": "第一个list功能",
    "deprecated": false,
    "produces": [
      "*/*"
    ],
    "operationId": "list3GET4997028859787988992",
    "responses": {
      "200": {
        "schema": {
          "type": "object",
          "properties": {
            "id": {
              "name": "id",
              "in": "formData",
              "description": "标识的desc",
              "required": true,
              "type": "string"
            },
            "createTime": {
              "name": "createTime",
              "in": "formData",
              "description": "时间的desc",
              "required": false,
              "type": "string"
            }
          }
        },
        "description": "返回profile列表"
      }
    },
    "description": "list的description",
    "parameters": [
      {
        "name": "id",
        "in": "formData",
        "description": "标识的desc",
        "required": true,
        "type": "string"
      },
      {
        "name": "createTime",
        "in": "formData",
        "description": "时间的desc",
        "required": false,
        "type": "string"
      }
    ],
    "tags": [
      "profile"
    ],
    "consumes": [
      "application/xml"
    ]
  }
}

在responses里面的schema不能正确的展示。 该问题在springfox-swagger-ui等其他工具上可以正确展示。如果schema内容为$ref指到definitions内的元素,展示没有问题。

debug页有否别禁用滚动条

我有个两个建议,
1: 你的文档界面右边的滚动条能正常使用,为什么debug界面,右边滚动条要禁用呢?如果我调试时返回的json较长,查看起来超级不方便,每次我都要把返回的json复制出来用记事本查看,麻烦死了。如果不禁用滚动条,且下面的结果区域能自己调大小,就方便多了
2:有办法支持拓展mock功能吗?

1.8.4优化选项

controller层实体类接收参数,发送请求时,默认实体类所有字段都是选中的,选中的参数如果不填写,默认会发送空的字符串到后台,影响查询结果。现在只能手动把不需要的参数都手动去掉勾选,比较繁琐,建议不填写的字段不要传值。

能否支持个性化的外部地址?

希望能够个性化host,port,/swagger-resources和/v2/api-docs的地址。
这样可以根据外部传入的参数,让一套ui程序,适应多个后台的文档。

js报错

js报错
tim 20170802142308

swagger 版本

<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.6.1</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
        </dependency>

对象参数展示解析问题

swagger-ui.html是这样的
{
"token": "string",
"userInfo": {
"email": "string",
"emailBinding": "string",
"encryMode": "string",
"faviconFileId": "string",
"id": 0,
"identityFileId": "string",
"identityNum": "string",
"identityType": "string",
"isDeleted": "string",
"mobile": "string",
"mobileBinding": "string",
"nickname": "string",
"oldId": 0,
"oldusername": "string",
"orgCode": "string",
"orgCodes": "string",
"orgId": 0,
"orgIds": "string",
"orgName": "string",
"password": "string",
"salt": "string",
"sex": "string",
"sysCode": "string",
"tel": "string",
"trueName": "string",
"trueNameEn": "string",
"username": "string",
"verifyStatus": "string"
}
}
Swagger-Bootstrap-UI是这样的:
{
"token":"",
"userInfo":""//这是一个对象,里面的属性就出不来了
}

功能建议:新接口高亮显示

这个功能在开发中比较有用

我有一个不成熟的想法
在local storage中维护一个非高亮接口的列表
1.所有未在该列表的接口进行高亮显示
2.当点击了该接口后,从高亮列表中删除
3.在这后面加上新接口个数
image

建议问题

1 左边导航栏繁杂,内容太多了,没有1.5的清晰
2 响应model中无法识别嵌套对象
3 建议响应参数说明的顺序和输入参数说明的顺序一致

consumes 类型与请求参数的参数类型展示不一致

  1. 参数类型展示:
    consumes ["multipart/form-data"] => 参数类型错误展示为 query
    consumes ["application/x-www-form-urlencoded"] => 参数类型错误展示为 formData

  2. 在线调试
    参数类型为 formData 的参数,填写了参数值还是提示 参数不能为空

出现堆栈溢出

在返回值有循环关联里会堆栈溢出.
关联关系如: A下有个集合属性,类型为B. B下也有集合属性,类型为A.
Uncaught RangeError: Maximum call stack size exceeded at Array.indexOf (<anonymous>) at Function.inArray (jquery-1.9.1.min.js:2) at checkIsBasicType (DApiUI.js:1475) at findRefDefinition (DApiUI.js:1518) at findRefDefinition (DApiUI.js:1531) at findRefDefinition (DApiUI.js:1531) at findRefDefinition (DApiUI.js:1531) at findRefDefinition (DApiUI.js:1531) at findRefDefinition (DApiUI.js:1531)

提一个小建议

这边的这个响应内容复制的时候会把那个折叠的符号一起复制,个人建议可以把那个折叠符号往前移一点,这样就不会和数据一起被复制了
6e5 r m2a 57 s0p8zj8e1

参数required = false无效

@ApiModelProperty注解里面不管设置required是true,还是false,生成出来doc页面,是否必须这一列总是true。

请问swagger2中怎么选择性的影藏参数属性

问题一:
比如
POST的时候不需要id属性
PUT的时候必须有id属性

问题二:
我设置了consumes=multipart/form-data
为什么还是不能multipart/form-data方式提交

tips:另外中文文档中的maven包版本没有更新,太老了

https以及consumes ["application/json"]的bug

版本:1.8.4

1、https 的文档地址,在线调试的时候变成了 http;
2、dataTypeClass = BigDecimal.class ,生成文档变成了 string;
3、paramType = "query" ,生成的文档显示 consumes ["application/json"]

希望新版能修复以上几个问题

JS 出现死循环了么,栈内存溢出了

Uncaught SyntaxError: Invalid regular expression: /#/definitions/(.*)$/: Stack overflow
at RegExp.test ()
at SwaggerBootstrapUi.findRefDefinition (swaggerbootstrapui.js:1470)
at SwaggerBootstrapUi.findRefDefinition (swaggerbootstrapui.js:1476)
at SwaggerBootstrapUi.findRefDefinition (swaggerbootstrapui.js:1476)
at SwaggerBootstrapUi.findRefDefinition (swaggerbootstrapui.js:1476)
at SwaggerBootstrapUi.findRefDefinition (swaggerbootstrapui.js:1476)
at SwaggerBootstrapUi.findRefDefinition (swaggerbootstrapui.js:1476)
at SwaggerBootstrapUi.findRefDefinition (swaggerbootstrapui.js:1476)
at SwaggerBootstrapUi.findRefDefinition (swaggerbootstrapui.js:1476)
at SwaggerBootstrapUi.findRefDefinition (swaggerbootstrapui.js:1476)

关于对象参数层级展示问题

swagger-ui.html是这样的
{
"token": "string",
"userInfo": {
"email": "string",
"emailBinding": "string",
"encryMode": "string",
"faviconFileId": "string",
"id": 0,
"identityFileId": "string",
"identityNum": "string",
"identityType": "string",
"isDeleted": "string",
"mobile": "string",
"mobileBinding": "string",
"nickname": "string",
"oldId": 0,
"oldusername": "string",
"orgCode": "string",
"orgCodes": "string",
"orgId": 0,
"orgIds": "string",
"orgName": "string",
"password": "string",
"salt": "string",
"sex": "string",
"sysCode": "string",
"tel": "string",
"trueName": "string",
"trueNameEn": "string",
"username": "string",
"verifyStatus": "string"
}
}
Swagger-Bootstrap-UI是这样的:
{
"token":"",
"userInfo":""//这是一个对象,里面的属性就出不来了
}

能否同时根据position,@ApiSort进行排序

目前的情况,好像是设置了position,@ApiSort就无效了。
我的预期是,当position相同的情况下,再按@ApiSort进行排序。
在实际应用中,可能几个API属于同一大类的,该大类使用position进行排序。
然后大类中的API根据@ApiSort进行内部排序。

或者加一个API分组的功能也不错(组名,排序)

例如:
1.一个投票APP有系统管理,和投票管理两个大类
2.系统管理中,又分为用户对象、角色对象、权限对象等等
3.用户对象又分为增删改查的接口

在SpringMVC中对应的具体控制器名类似:
一、
1.UsersController

  • 增加接口
  • 删除接口
  • 查询接口

2.RolesController

二、
1.VoteSubjectsController(投票主体管理)
2.VoteResultsController(投票结果管理)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.