Acredito que tanto o desenvolvimento front-end quanto o back-end foram mais ou menos torturados por documentos de interface. O front end frequentemente reclama que os documentos de interface fornecidos pelo back end são inconsistentes com a situação real. O back-end sente que escrever e manter documentos de interface consumirá muita energia e, geralmente, é tarde demais para atualizar. Na verdade, quer o front end chame o back end ou o back end chame o back end, espera-se um bom documento de interface.
O Swagger integrado do SpringBoot pode descrever claramente a interface por meio de anotações muito simples e gerar uma página de documento visual.
A interface nativa do Swagger-ui é muito difícil, então use o knife4j-spring-ui .
Navegação neste artigo
Uma boa descrição de documento de interface HTTP
- Escreva claramente o caminho da solicitação da interface: QueryPath: / user / login
- Escreva claramente o tipo de método de solicitação da interface: GET / POST / DELETE / PUT
- Escreva claramente o significado comercial da interface e dos cenários de uso
- Escreva claramente os parâmetros de entrada da interface: descrição do parâmetro, tipo de parâmetro, estrutura de parâmetro, se o parâmetro deve ser passado
- Escreva claramente o tipo de retorno da interface: estrutura de dados retornada, condições anormais
SpringBoot integra Swagger
Dependência de introdução do projeto
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-ui</artifactId>
<version>2.0.4</version>
</dependency>
SpringBoot sobre a configuração do Swagger
Basta colar esta configuração Swagger no projeto
@EnableSwagger2
@Configuration
public class SwaggerConfig implements WebMvcConfigurer {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//这里改成自己的接口包名
.apis(RequestHandlerSelectors.basePackage("vip.codehome.springboot.tutorials.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("SpringBoot教程接口文档")//标题
.description("使用swagger文档管理接口")//描述
.contact(new Contact("codehome", "", "[email protected]"))//作者信息
.version("1.0.0")//版本号
.build();
}
//解决doc.html,swagger-ui.html 404问题
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(
"classpath:/static/");
registry.addResourceHandler("swagger-ui.html").addResourceLocations(
"classpath:/META-INF/resources/");
registry.addResourceHandler("doc.html").addResourceLocations(
"classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/");
}
}
Uso específico de Swagger
A função de cada anotação
- @Api apresenta o papel da classe na classe
- @ApiOperation coloca no método para apresentar a função do método
- @ApiImplicitParam Introdução
- @ApiResponse apresenta o status de retorno
- @ApiModel, @ApiModelProperty Introdução O parâmetro de entrada é um objeto e o retorno é uma descrição de campo de objeto
Exemplo de código
@RestController
@Api(tags = "Swagger注解测试类")
public class SwaggerUserController {
@ApiOperation(value = "这是一个echo接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "msg",value = "请求的msg参数",required = true,paramType = "query"),
@ApiImplicitParam(name = "token",value = "请求的token",required = false,paramType ="header" )
})
@ApiResponses({
@ApiResponse(code=200,message = "请求成功"),
@ApiResponse(code=400,message="请求无权限")
})
@GetMapping("/echo")
public String echo(String msg,@RequestHeader(name = "token") String token){
return msg;
}
@PostMapping("/login")
public R<UserInfoVO> login(@RequestBody LoginDTO loginDTO){
UserInfoVO userInfoVO=new UserInfoVO();
userInfoVO.setNickname("编程之家");
userInfoVO.setToken("xxx");
return R.ok(userInfoVO);
}
}
@Data
@ApiModel
public class LoginDTO {
@ApiModelProperty(value = "用户账号或者邮箱")
String account;
@ApiModelProperty(value = "用户密码")
String passwd;
@ApiModelProperty(value = "用户密码")
String verifyCode;
}
Efeito de documento de interface
A visita aqui é http: // localhost: 8080 / doc.html, knife4j-spring-ui também tem funções mais poderosas do que as originais.
Mil milhas começam com um único passo. Aqui está o segundo artigo da série de tutoriais SpringBoot. Todos os códigos-fonte do projeto podem ser baixados em meu GitHub .