请教在线文档的api

html-css048

请教在线文档的api,第1张

Android中文版

api手册地址:http://www.matools.com/api/android

Ant最新版

api手册地址:http://www.matools.com/api/ant

ASM字节码操作

api手册地址:http://www.matools.com/api/asm

Axis2最新版

api手册地址:http://www.matools.com/api/axis2

Bash脚本

api手册地址:http://www.matools.com/api/bash

Bootstrap 3

api手册地址:http://www.matools.com/api/bootstrap3

Bootstrap 4

api手册地址:http://www.matools.com/api/bootstrap4

C/C++

api手册地址:http://www.matools.com/api/c

C3P0连接池

api手册地址:http://www.matools.com/api/c3p0

CentOS使用文档

api手册地址:http://www.matools.com/api/centos

Commons-Beanutils

api手册地址:http://www.matools.com/api/commons-beanutils

Commons-Fileupload

api手册地址:http://www.matools.com/api/commons-fileupload

Commons-IO最新版

api手册地址:http://www.matools.com/api/commons-io

Commons-Lang最新版

api手册地址:http://www.matools.com/api/commons-long

Commons-Net最新版

api手册地址:http://www.matools.com/api/commons-net

CSS 3

api手册地址:http://www.matools.com/api/css

DBCP连接池

api手册地址:http://www.matools.com/api/dbcp

Dom4j

api手册地址:http://www.matools.com/api/dom4j

dubbo中文文档

api手册地址:http://www.matools.com/api/dubbo

EhCache

api手册地址:http://www.matools.com/api/ehcache

Freemarker

api手册地址:http://www.matools.com/api/freemarker

Go语言

api手册地址:http://www.matools.com/api/go

Hadoop

api手册地址:http://www.matools.com/api/hadoop

Hibernate中文版

api手册地址:http://www.matools.com/api/hibernate

IKAnalyzer中文版

api手册地址:http://www.matools.com/api/ikanalyzer

Java 10

api手册地址:http://www.matools.com/api/java10

Java 6

api手册地址:http://www.matools.com/api/java6

Java 7

api手册地址:http://www.matools.com/api/java7

Java 8中文版

api手册地址:http://www.matools.com/api/java8

jqGrid中文版

api手册地址:http://www.matools.com/api/jqgrid

Jquery中文版

api手册地址:http://www.matools.com/api/jquery

Json-lib

api手册地址:http://www.matools.com/api/json-lib

Junit4最新版

api手册地址:http://www.matools.com/api/junit

Kryo

api手册地址:http://www.matools.com/api/kryo

Log4j最新版

api手册地址:http://www.matools.com/api/log4j

Lucene

api手册地址:http://www.matools.com/api/lucene

Maven

api手册地址:http://www.matools.com/api/maven

Windows MFC中文版

api手册地址:http://www.matools.com/api/msdn

Mybatis

api手册地址:http://www.matools.com/api/mybatis

MySql中文版

api手册地址:http://www.matools.com/api/mysql

Netty 3.6

api手册地址:http://www.matools.com/api/netty

Nginx中文版

api手册地址:http://www.matools.com/api/nginx

OpenJPA最新版

api手册地址:http://www.matools.com/api/openjpa

PHP中文版

api手册地址:http://www.matools.com/api/php

POI-apache

api手册地址:http://www.matools.com/api/poi

QuickServer

api手册地址:http://www.matools.com/api/quickserver

redis中文参考文档

api手册地址:http://www.matools.com/api/redis

Ruby

api手册地址:http://www.matools.com/api/ruby

Ruby-library

api手册地址:http://www.matools.com/api/ruby-library

Ruby on Rails

api手册地址:http://www.matools.com/api/rubyonrails

Shiro

api手册地址:http://www.matools.com/api/shiro

Spring最新版

api手册地址:http://www.matools.com/api/spring

Spring for Android

api手册地址:http://www.matools.com/api/spring-android

Spring Boot

api手册地址:http://www.matools.com/api/spring-boot

Spring Cloud中文文档

api手册地址:http://www.matools.com/api/spring-cloud

Spring Security

api手册地址:http://www.matools.com/api/spring-security

Spring中文版

api手册地址:http://www.matools.com/api/spring-zh

Struts 2最新版

api手册地址:http://www.matools.com/api/struts2

Taperstry

api手册地址:http://www.matools.com/api/taperstry

TensorFlow中文

api手册地址:http://www.matools.com/api/tensorflow

Tomcat

api手册地址:http://www.matools.com/api/tomcat

Ubuntu

api手册地址:http://www.matools.com/api/ubuntu

Velocity 1.7

api手册地址:http://www.matools.com/api/velocity

VelocityTools2.0

api手册地址:http://www.matools.com/api/velocity-tools

Vue Router中文参考

api手册地址:http://www.matools.com/api/vue-router

vue.js中文文档

api手册地址:http://www.matools.com/api/vuejs

XMLBeans

api手册地址:http://www.matools.com/api/xmlbeans

Yahoo UI中文版

api手册地址:http://www.matools.com/api/yui

Zend Framework中文版

api手册地址:http://www.matools.com/api/zend-framework

Zookeeper

api手册地址:http://www.matools.com/api/zookeeper

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

API文档是一个技术内容交付文件,包含如何有效地使用和集成api的说明。它是一个简明的参考手册,包含了使用API所需的所有信息,详细介绍了函数、类、返回类型、参数等,并有教程是示例支撑。

API文档传统上是使用常规内容创建和维护工具和文本编辑器完成的。API描述格式如OpenAPI /Swagger规范具有自动文档编制流程,它使得团队更容易生成和维护API文档。

扩展资料:

Windows API

API函数包含在Windows系统目录下的动态连接库文件中。Windows API是一套用来控制Windows的各个部件的外观和行为的预先定义的Windows函数。用户的每个动作都会引发一个或几个函数的运行以告诉Windows发生了什么。

这在某种程度上很像Windows的天然代码。而其他的语言只是提供一种能自动而且更容易的访问API的方法。当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体,VB获取这个调用并经过分析后生成一个特定事件。

更易理解来说:Windows系统除了协调应用程序的执行、内存的分配、系统资源的管理外,同时他也是一个很大的服务中心。

调用这个服务中心的各种服务(每一种服务就是一个函数)可以帮助应用程序达到开启视窗、描绘图形和使用周边设备等目的,由于这些函数服务的对象是应用程序,所以称之为Application Programming Interface,简称API 函数。

WIN32 API也就是MicrosoftWindows 32位平台的应用程序编程接口。凡是在 Windows工作环境底下执行的应用程序,都可以调用Windows API。

linux API

在linux中,用户编程接口API遵循了UNIX中最流行的应用编程界面标准---POSIX标准。POSIX标准是由IEEE和ISO/IEC共同开发的标准系统。

该标准基于当时现有的UNIX实践和经验,描述了操作系统的系统调用编程接口API,用于保证应用程序可以在源程序一级上在多种操作系统上移植运行。这些系统调用编程接口主要是通过C库(LIBC)来实现的。

参考资料:百度百科-api

之前在SpringBoot项目中一直使用的是SpringFox提供的Swagger库,上了下官网发现已经有接近两年没出新版本了!前几天升级了SpringBoot 2.6.x 版本,发现这个库的兼容性也越来越不好了,有的常用注解属性被废弃了居然都没提供替代!无意中发现了另一款Swagger库SpringDoc,试用了一下非常不错,推荐给大家!

SpringDoc简介

SpringDoc是一款可以结合SpringBoot使用的API文档生成工具,基于OpenAPI 3,目前在Github上已有1.7K+Star,更新发版还是挺勤快的,是一款更好用的Swagger库!值得一提的是SpringDoc不仅支持Spring WebMvc项目,还可以支持Spring WebFlux项目,甚至Spring Rest和Spring Native项目,总之非常强大,下面是一张SpringDoc的架构图。

使用

接下来我们介绍下SpringDoc的使用,使用的是之前集成SpringFox的mall-tiny-swagger项目,我将把它改造成使用SpringDoc。

集成

首先我们得集成SpringDoc,在pom.xml中添加它的依赖即可,开箱即用,无需任何配置。

<!--springdoc 官方Starter-->org.springdocspringdoc-openapi-ui1.6.6

从SpringFox迁移

我们先来看下经常使用的Swagger注解,看看SpringFox的和SpringDoc的有啥区别,毕竟对比已学过的技术能该快掌握新技术;

接下来我们对之前Controller中使用的注解进行改造,对照上表即可,之前在@Api注解中被废弃了好久又没有替代的description属性终于被支持了!

/**

* 品牌管理Controller

* Created by macro on 2019/4/19.

*/@Tag(name ="PmsBrandController", description ="商品品牌管理")@Controller@RequestMapping("/brand")publicclassPmsBrandController{@AutowiredprivatePmsBrandService brandServiceprivatestaticfinalLogger LOGGER = LoggerFactory.getLogger(PmsBrandController.class)@Operation(summary ="获取所有品牌列表",description ="需要登录后访问")@RequestMapping(value ="listAll", method = RequestMethod.GET)@ResponseBodypublicCommonResult>getBrandList() {returnCommonResult.success(brandService.listAllBrand())    }@Operation(summary ="添加品牌")@RequestMapping(value ="/create", method = RequestMethod.POST)@ResponseBody@PreAuthorize("hasRole('ADMIN')")publicCommonResult createBrand(@RequestBodyPmsBrand pmsBrand) {        CommonResult commonResult        int count = brandService.createBrand(pmsBrand)if(count ==1) {            commonResult = CommonResult.success(pmsBrand)            LOGGER.debug("createBrand success:{}", pmsBrand)        }else{            commonResult = CommonResult.failed("操作失败")            LOGGER.debug("createBrand failed:{}", pmsBrand)        }returncommonResult    }@Operation(summary ="更新指定id品牌信息")@RequestMapping(value ="/update/{id}", method = RequestMethod.POST)@ResponseBody@PreAuthorize("hasRole('ADMIN')")publicCommonResult updateBrand(@PathVariable("id")Longid,@RequestBodyPmsBrand pmsBrandDto, BindingResult result) {        CommonResult commonResult        int count = brandService.updateBrand(id, pmsBrandDto)if(count ==1) {            commonResult = CommonResult.success(pmsBrandDto)            LOGGER.debug("updateBrand success:{}", pmsBrandDto)        }else{            commonResult = CommonResult.failed("操作失败")            LOGGER.debug("updateBrand failed:{}", pmsBrandDto)        }returncommonResult    }@Operation(summary ="删除指定id的品牌")@RequestMapping(value ="/delete/{id}", method = RequestMethod.GET)@ResponseBody@PreAuthorize("hasRole('ADMIN')")publicCommonResult deleteBrand(@PathVariable("id")Longid) {        int count = brandService.deleteBrand(id)if(count ==1) {            LOGGER.debug("deleteBrand success :id={}", id)returnCommonResult.success(null)        }else{            LOGGER.debug("deleteBrand failed :id={}", id)returnCommonResult.failed("操作失败")        }    }@Operation(summary ="分页查询品牌列表")@RequestMapping(value ="/list", method = RequestMethod.GET)@ResponseBody@PreAuthorize("hasRole('ADMIN')")publicCommonResult>listBrand(@RequestParam(value ="pageNum", defaultValue ="1")@Parameter(description ="页码")Integer pageNum,@RequestParam(value ="pageSize", defaultValue ="3")@Parameter(description ="每页数量")Integer pageSize) {        List brandList = brandService.listBrand(pageNum, pageSize)returnCommonResult.success(CommonPage.restPage(brandList))    }@Operation(summary ="获取指定id的品牌详情")@RequestMapping(value ="/{id}", method = RequestMethod.GET)@ResponseBody@PreAuthorize("hasRole('ADMIN')")publicCommonResult brand(@PathVariable("id")Longid) {returnCommonResult.success(brandService.getBrand(id))    }}

接下来进行SpringDoc的配置,使用OpenAPI来配置基础的文档信息,通过GroupedOpenApi配置分组的API文档,SpringDoc支持直接使用接口路径进行配置。

/**

* SpringDoc API文档相关配置

* Created by macro on 2022/3/4.

*/@ConfigurationpublicclassSpringDocConfig{@BeanpublicOpenAPImallTinyOpenAPI(){returnnewOpenAPI()                .info(newInfo().title("Mall-Tiny API")                        .description("SpringDoc API 演示")                        .version("v1.0.0")                        .license(newLicense().name("Apache 2.0").url("https://github.com/macrozheng/mall-learning")))                .externalDocs(newExternalDocumentation()                        .description("SpringBoot实战电商项目mall(50K+Star)全套文档")                        .url("http://www.macrozheng.com"))    }@BeanpublicGroupedOpenApipublicApi(){returnGroupedOpenApi.builder()                .group("brand")                .pathsToMatch("/brand/**")                .build()    }@BeanpublicGroupedOpenApiadminApi(){returnGroupedOpenApi.builder()                .group("admin")                .pathsToMatch("/admin/**")                .build()    }}

结合SpringSecurity使用

由于我们的项目集成了SpringSecurity,需要通过JWT认证头进行访问,我们还需配置好SpringDoc的白名单路径,主要是Swagger的资源路径;

/**

* SpringSecurity的配置

* Created by macro on 2018/4/26.

*/@Configuration@EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled = true)public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity httpSecurity) throws Exception {httpSecurity.csrf()// 由于使用的是JWT,我们这里不需要csrf.disable().sessionManagement()// 基于token,所以不需要session.sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests().antMatchers(HttpMethod.GET,// Swagger的资源路径需要允许访问"/","/swagger-ui.html","/swagger-ui/","/*.html","/favicon.ico","/**/*.html","/**/*.css","/**/*.js","/swagger-resources/**","/v3/api-docs/**").permitAll().antMatchers("/admin/login")// 对登录注册要允许匿名访问.permitAll().antMatchers(HttpMethod.OPTIONS)//跨域请求会先进行一次options请求.permitAll().anyRequest()// 除上面外的所有请求全部需要鉴权认证.authenticated()            }}

然后在OpenAPI对象中通过addSecurityItem方法和SecurityScheme对象,启用基于JWT的认证功能。

/**

* SpringDoc API文档相关配置

* Created by macro on 2022/3/4.

*/@ConfigurationpublicclassSpringDocConfig{privatestaticfinalString SECURITY_SCHEME_NAME ="BearerAuth"@BeanpublicOpenAPImallTinyOpenAPI(){returnnewOpenAPI()                .info(newInfo().title("Mall-Tiny API")                        .description("SpringDoc API 演示")                        .version("v1.0.0")                        .license(newLicense().name("Apache 2.0").url("https://github.com/macrozheng/mall-learning")))                .externalDocs(newExternalDocumentation()                        .description("SpringBoot实战电商项目mall(50K+Star)全套文档")                        .url("http://www.macrozheng.com"))                .addSecurityItem(newSecurityRequirement().addList(SECURITY_SCHEME_NAME))                .components(newComponents()                                .addSecuritySchemes(SECURITY_SCHEME_NAME,newSecurityScheme()                                                .name(SECURITY_SCHEME_NAME)                                                .type(SecurityScheme.Type.HTTP)                                                .scheme("bearer")                                                .bearerFormat("JWT")))    }}

测试

接下来启动项目就可以访问Swagger界面了,访问地址:http://localhost:8088/swagger-ui.html

我们先通过登录接口进行登录,可以发现这个版本的Swagger返回结果是支持高亮显示的,版本明显比SpringFox来的新;

然后通过认证按钮输入获取到的认证头信息,注意这里不用加bearer前缀;

之后我们就可以愉快地访问需要登录认证的接口了;

看一眼请求参数的文档说明,还是熟悉的Swagger样式!

常用配置

SpringDoc还有一些常用的配置可以了解下,更多配置可以参考官方文档。

springdoc:swagger-ui:# 修改Swagger UI路径path:/swagger-ui.html# 开启Swagger UI界面enabled:trueapi-docs:# 修改api-docs路径path:/v3/api-docs# 开启api-docsenabled:true# 配置需要生成接口文档的扫描包packages-to-scan:com.macro.mall.tiny.controller# 配置需要生成接口文档的接口路径paths-to-match:/brand/**,/admin/**

总结

在SpringFox的Swagger库好久不出新版的情况下,迁移到SpringDoc确实是一个更好的选择。今天体验了一把SpringDoc,确实很好用,和之前熟悉的用法差不多,学习成本极低。而且SpringDoc能支持WebFlux之类的项目,功能也更加强大,使用SpringFox有点卡手的朋友可以迁移到它试试!

参考资料

项目地址:https://github.com/springdoc/springdoc-openapi

官方文档:https://springdoc.org/

项目源码地址

https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-springdoc

https://mp.weixin.qq.com/s/scityFhZp9BOJorZSdCG0w