1 arrogância
Extremidades frontais e traseiras separadas
-> camadas de controle dianteiras, visualização da camada da
extremidade traseira -> camada de controle de backhaul e camada de serviço, camada de acesso de dados
dianteiro e traseiro por API interage
nas extremidades dianteira e traseira e
problemas independentes fracamente acoplados decorrentes de
dianteiro e traseiro integrado dianteiro ou traseiro O fim é incapaz de "negociar a tempo e resolvê-lo o mais rápido possível", o que eventualmente leva a um surto concentrado de
problemas. Soluções
Primeiro defina o esquema [esboço do plano] e rastreie o API mais recente em tempo real para reduzir os riscos de integração.
Swagger é
conhecido como a estrutura de API mais popular do mundo.
Documento Api Restful Gerador automático online => documentação da API e definição da API são atualizadas de forma síncrona e
executadas diretamente, a API de teste online
suporta vários idiomas ( tais como: Java, PHP, etc.)
Site oficial: https://swagger.io/
2 SpringBoot integra Swagger
Adicionar dependência Maven ao novo projeto springweb
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
Para escrever um projeto Hello
para usar Swagger, precisamos escrever uma classe de configuração-SwaggerConfig para configurar o Swagger
package com.zs.swagger.config;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2 // 开启swagger2
public class SwaggerConfig {
}
Visite teste: http: // localhost: 8080 / swagger-ui.html, você pode ver a interface do swagger;
3 Configure Swagger
O bean de instância Swagger é Docket, então configure Swaggger configurando a instância Docket
@Bean //配置docket以配置Swagger具体参数
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2);
}
As informações de configuração a seguir podem ser obtidas por meio das informações do documento de configuração de propriedade apiInfo ()
//配置文档信息
private ApiInfo apiInfo() {
Contact contact = new Contact("联系人名字", "http://xxx.xxx.com/联系人访问链接", "联系人邮箱");
return new ApiInfo(
"Swagger学习", // 标题
"学习演示如何配置Swagger", // 描述
"v1.0", // 版本
"http://terms.service.url/组织链接", // 组织链接
contact, // 联系人信息
"Apach 2.0 许可", // 许可
"许可链接", // 许可连接
new ArrayList<>()// 扩展
);
}
4 Configure a interface de digitalização
Configure como fazer a varredura da interface por meio do método select () ao construir o Docket
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
.apis(RequestHandlerSelectors.basePackage("com.kuang.swagger.controller"))
.build();
}
Além de configurar a interface de verificação por meio do caminho do pacote, você também pode configurar outros métodos para verificar a interface. Aqui, observe todos os métodos de configuração
any () // Verificar tudo, todas as interfaces no projeto serão verificadas
nenhum () // não verifica a interface
// Faça a varredura de anotações em métodos, como withMethodAnnotation (GetMapping.class), faça a varredura apenas de solicitações de
obtenção com a anotação de classe final
// Varre as anotações nas classes, como .withClassAnnotation (Controller.class) só varre as interfaces nas classes com as anotações do controlador com a anotaçãoClassAnnotation
(classe final <? Extends Annotation> anotação)
basePackage (final String basePackage) // verifica a interface de acordo com o caminho do pacote
Além disso, também podemos configurar a filtragem de verificação de interface
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()//通过.select()方法,去配置扫描接口
.apis(RequestHandlerSelectors.basePackage("com.zs.swagger.controller"))// RequestHandlerSelectors配置如何扫描接口
// 配置如何通过path过滤,即这里只扫描请求以/zs开头的接口
.paths(PathSelectors.ant("/zs/**"))
.build();
}
5 Configure a chave Swagger
Configure se deseja ativar o swagger por meio do método enable (). Se for falso, o swagger não estará acessível no navegador
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(false) //配置是否启用Swagger,如果是false,在浏览器将无法访问
.select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
.apis(RequestHandlerSelectors.basePackage("com.zs.swagger.controller"))
// 配置如何通过path过滤,即这里只扫描请求以/zs开头的接口
.paths(PathSelectors.ant("/zs/**"))
.build();
}
Como configurar dinamicamente para exibir swagger quando o projeto está no ambiente de teste e desenvolvimento, mas não quando está em produção
@Bean
public Docket docket(Environment environment) {
// 设置要显示的swagger的环境
Profiles profiles = Profiles.of("dev");
// 获取项目环境是否处在自己需要的环境
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(flag)
.select()//通过.select()方法,去配置扫描接口
.apis(RequestHandlerSelectors.basePackage("com.zs.swagger.controller"))// RequestHandlerSelectors配置如何扫描接口
// 配置如何通过path过滤,即这里只扫描请求以/zs开头的接口
.paths(PathSelectors.ant("/zs/**"))
.build();
}
6 Configure o agrupamento de API
Se nenhum grupo for configurado, o padrão é o padrão. O grupo pode ser configurado através do método groupName ()
@Bean
public Docket docket(Environment environment) {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
.groupName("hello") // 配置分组
// 省略配置....
}
Como configurar vários grupos? Configurar vários grupos só precisa configurar vários encaixes
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("group1");
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("group2");
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName("group3");
}
7 Configuração de entidade
Crie uma nova classe de entidade
package com.zs.swagger.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel("用户实体(User)")
public class User {
@ApiModelProperty("用户名")
private String username;
@ApiModelProperty("密码")
private String password;
}
@RequestMapping("/getUser")
public User getUser() {
return new User();
}
Não é que a anotação @ApiModel faça a entidade aparecer aqui, mas a entidade que aparece no valor de retorno do método de interface será exibida aqui, e as duas anotações @ApiModel e @ApiModelProperty são apenas para adicionar anotações à entidade.
Também podemos configurar algumas notas para a interface solicitada
package com.zs.swagger.controller;
import com.zs.swagger.pojo.User;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping(value = "/hello")
public String hello() {
return "hello";
}
@PostMapping("/getUser")
public User getUser() {
return new User();
}
@GetMapping("/hi")
@ApiOperation("对你说hi")
public String hi(@ApiParam("用户名") String username) {
return "hi"+username;
}
}
Nesse caso, você pode adicionar algumas informações de configuração a algumas propriedades ou interfaces mais difíceis de entender, para que seja mais fácil para as pessoas lerem o
bootstrap-ui. Visite http: // localhost: 8080 / doc.html
<!-- 引入swagger-bootstrap-ui包 /doc.html-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.1</version>
</dependency>