分享

基于 Spring Boot 的接口开发与管理

 TestOps云层 2021-06-22

在前面的文章中我们已经了解到如何快速构建一个基于 Spring Boot 架构的 Web 服务:

【干货】如何快速构建SpringBoot Web服务

今天这篇文章我们将继续深入学习接口开发与接口管理的内容。

我们先从简单的 GET 请求的实现开始:

GET接口开发

返回 Cookies 的 GET 请求实现

我们这里以登录成功后,新添加一个 Cookie ,并返回对应的值示例。

示例代码:

@RequestMapping(value = "/getCookies",method = RequestMethod.GET)@ApiOperation(value = "通过这个方法可以获取到Cookies",httpMethod = "GET")public String getCookies(HttpServletResponse response){ Cookie cookie = new Cookie("login","true"); response.addCookie(cookie); return "恭喜你获得cookies信息成功";}

Cookies 验证接口实现

在客户端通过上述接口获取并保存对应的 Cookie 值后,在后续接口中,需要携带 Cookie 信息;服务端获取到对应值并进行验证。

示例代码:

@RequestMapping(value = "/get/with/cookies",method = RequestMethod.GET)@ApiOperation(value = "要求客户端携带cookies访问",httpMethod = "GET")public String getWithCookies(HttpServletRequest request){ Cookie[] cookies = request.getCookies(); if(Objects.isNull(cookies)){ return "你必须携带cookies信息来"; } for(Cookie cookie : cookies){ if(cookie.getName().equals("login") && cookie.getValue().equals("true")){ return "资源访问成功!"; } else { return "cookies信息错误"; } }
return "cookies信息为空,必须携带cookies";}

携带参数的 GET 请求接口方式可以多样化,这里提供两个作为参考。

携带参数的 GET 请求实现-方式一

示例代码:

@RequestMapping(value = "/get/with/param",method = RequestMethod.GET)@ApiOperation(value = "需求携带参数才能访问的get请求方法一",httpMethod = "GET")public Map<String,Integer> getList(@RequestParam Integer start, @RequestParam Integer end){    Map<String,Integer> myList = new HashMap<>(); msg.put("status","0");    msg.put("msg","请求成功");     return myList;
}

携带参数的 GET 请求实现-方式二:

示例代码:

@RequestMapping(value = "/get/with/param/{start}/{end}")@ApiOperation(value = "需求携带参数才能访问的get请求的第二种实现",httpMethod = "GET")public Map myGetList(@PathVariable Integer start,                      @PathVariable Integer end){ Map<String,String > msg = new HashMap<>();    msg.put("status","0");    msg.put("msg","请求成功");
    return  myList;}

POST接口开发

了解完 GET 请求的开发过程后,我们继续学习 POST 方式的接口开发方法。

这里演示登录接口,以及获取用户信息接口两个接口。

示例代码:

@RestController@Api(value = "/",description = "TestOps全部的post方法")public class myPost { //这个变量是用来装我们cookies信息的 private static Cookie cookie;
//用户登陆成功获取到cookies,然后再访问其他接口获取到列表 @RequestMapping(value = "/login",method = RequestMethod.POST) @ApiOperation(value = "登陆接口",httpMethod = "POST") public String login(HttpServletResponse response, @RequestParam(value = "userName",required = true) String userName, @RequestParam(value = "password",required = true) String passWord){
if(userName.equals("TestOps") && passWord.equals("123456")){ cookie = new Cookie("login","true"); response.addCookie(cookie); return "恭喜你登陆成功了!"; } return "用户名或者是密码错误!"; }
@RequestMapping(value = "/getUserList", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") @ApiOperation(value = "获取用户信息接口",httpMethod = "POST")    public Map<StringString> getUserList(@RequestBody userLogin user) { Map<String,String > msg = new HashMap<>(); if(user.getPassWord().equals("123456")&&user.getUserName().equals("testOps")){ msg.put("status","0"); msg.put("msg","请求成功"); } else { msg.put("status","1"); msg.put("msg","用户名或者密码错误");} return msg;        }    }}

其中userLogin代码为:

public class userLogin {    private String userName; private String passWord;
public String getUserName() { return userName; }
public void setUserName(String userName) { this.userName = userName; }
public String getPassWord() { return passWord; }
public void setPassWord(String passWord) { this.passWord = passWord; }
@Override public String toString() { return "User{" + "userName='" + userName + '\'' + ",passWord='" + passWord + '\'' + '}'; }}

在了解 GET 和 POST 接口的实现之后,我们一起来看看如何整合 Swagger 实现在线的接口文档的功能。

Swagger

首先需要在 pom.xml 中添加相关依赖:

<!--集成swagger2--><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>

并添加对应的配置文件:

@Configuration@EnableSwagger2public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .pathMapping("/") .select() // 选择那些路径和api会生成document .apis(RequestHandlerSelectors.any())// 对所有api进行监控 .paths(Predicates.not(PathSelectors.regex("/error.*")))//错误路径不监控 .paths(PathSelectors.regex("/.*"))// 对根下所有路径进行监控 .build(); }
private ApiInfo apiInfo() { return new ApiInfoBuilder().title("TestOps接口文档") .contact(new Contact("TestOps", "http://www./", "11054212787@qq.com")) .description("TestOps测试运维从零开始项目接口文档") .termsOfServiceUrl("TestOps测试运维从零开始") .license("The Apache License, Version 2.0") .licenseUrl("http://www./licenses/LICENSE-2.0.html") .version("v1.0") .build(); }}

配置完成之后,即可使用相关注解修饰指定的接口。

示例:

// @Api:用在类上,说明该类的作用@Api(value = "v1",description = "用户信息接口")
// @ApiOperation:用在方法上,说明方法的作用@ApiOperation(value = "可以获取到用户数",httpMethod = "GET")@ApiOperation(value = "通过用户名查询用户信息", notes = "通过用户名查询用户信息")
// @ApiResponses:于表示一组响应@ApiResponses(value = { @ApiResponse(code = 200, message = "保存成功"), @ApiResponse(code = 401, message = "没有权限"), @ApiResponse(code = 403, message = "被禁止访问"), @ApiResponse(code = 404, message = "没有找到")}

大家也可以使用:

@ApiImplicitParam:用在方法上包含一组参数说明)

@ApiModel:描述一个Model的信息,一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候

@ApiModelProperty:描述一个model的属性

等相关注解

接口文档查看

访问:http://localhost:8085/testops/swagger-ui.html#/

就可以看到对应的在线文档:

在整合 Swagger 文档的时候,如果觉得 Swagger 的原生界面不是很友好,可以考虑使用 knife4j 。

添加相关依赖即可:

<dependency> <groupId>com.github.xiaoymin</groupId>    <artifactId>knife4j-spring-boot-starter</artifactId> <version>2.0.6</version></dependency>
<dependency> <groupId>com.github.xiaoymin</groupId>    <artifactId>knife4j-springdoc-ui</artifactId> <version>2.0.6</version></dependency>
_

时间

课题

周一


20:00

腾讯课堂

《敏捷测试从零开始》

周二


20:00

腾讯课堂

《测试开发从零开始》python篇

周三


20:00

腾讯课堂

《运维从零开始》

周四


20:00

腾讯课堂

《测试开发从零开始

java篇

微信号 : TestOps

知乎:@TestOps云层

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多