一、RESTful接口与http协议状态表述

  • RESTful风格API的好处
    • API:Application Programming Interface 一组编程接口规范
    • Representational State Transfer 表述性状态传递,决定了接口的形式与规则
    • RESTful是基于http方法的API设计风格【约定大于配置】
      • 看url知道要什么资源
      • 看http method知道针对资源干什么
      • 看http status code知道请求结果
  • RESTful API的设计风格

    • 接口命名对比:
      • 2-RESTful接口实现与测试 - 图1
    • 常见动词【使用负数名词、版本化接口】
      • GET:获取、读取资源【不改变数据】
      • POST:添加资源
      • PUT:修改
      • DELETE:删除
    • RESTful风格接口文档:http://httpbin.org/

      二、Spring常用注解及基础讲解

  • HTTP协议的传参方式 | HTTP协议组成 | 协议内容示例 | 对应Spring注解 | | —- | —- | —- | | path info传参 | /articles/12 (查询id为12的⽂
    章,12是参数) | @PathVariable | | URL Query String传参 | /articles?id=12 | @RequestParam | | Body 传参 | Content-Type: multipart/form-
    data | @RequestParam | | Body 传参 | Content-Type:
    application/json,或其他⾃定义
    格式 | @RequestBody | | Headers 传参 | | @RequestHeader |

  • 常用注解

    • @RequestBody与@ResponseBody
      • @RequestBody:修饰请求参数,注解用于接收HTTP的body,默认是使用JSON的格式
      • @ResponseBody :修饰返回值
    • @RequestMapping
      • value:请求端点
      • method:请求方式
      • consumes:请求内容的数据类型
      • params:请求参数值
      • headers:指定请求头
    • @RestController与@Controller
      • 有模板页面用@controller
      • 没有页面@Rescontroller
    • @PathVariable 与@RequestParam
    • @RequestBody可以使用嵌套的对象传参
  • 统一规范接口

    • 所有开发人员统一请求接口返回格式,是一种RESTful接口标准化开发约定

      三、JSON数据处理与Postman测试

  • FastJSON

    • SpringBoot默认是使⽤Jackson作为JSON数据格式处理的类库
  • Gson
    • Gson是Google为满⾜内部需求开发的JSON数据处理类库,其核⼼结构⾮常简

单,toJson与fromJson两个转换函数实现对象与JSON数据的转换

  • Jackson
    • Fastjson是阿⾥巴巴开源的JSON数据处理类库,其主要特点是序列化速度

  • 序列化过程性能:fastjson >= jackson > Gson

    四、在Spring中注解方法使用Json

  • 反序列化

    • 在客户端将请求数据上传到服务端的时候,⾃动的处理JSON数据对象中的字符串、

数字,将其转换为包含Date类型、Integer等类型的对象。

  • 序列化:
    • 按照指定的格式、顺序等将实体类对象转换为JSON字符串
  • 常用注解

    • @JsonPropertyOrder(value={“pname1”,”pname2”}) 改变子属性在JSON序列化中的默认定义的顺序
    • @JsonIgnore 加在属性上面,排除某个属性不做序列化与反序列化
    • @JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略JSON字符串中存在,但实体类不存在的属性,不予赋值,也不会出现异常。
    • @JsonIgnoreProperties({ “xxx”, “yyyy” }) 忽略某些属性不进⾏序列化
    • @JsonProperty(anotherName) 为某个属性换⼀个名称,体现在JSON数据里面
    • @JsonInclude(JsonInclude.Include.NON_NULL) 排除为空的元素不做序列化反序列化
    • @JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8”) 指定日期类型的属性格式

      五、使用Mockito编码完成接口测试

  • MockMvc对象有以下几个基本的方法:

    • perform : 模拟执行⼀个RequestBuilder构建的HTTP请求,会执行SpringMVC的流程并映射到相应的控制器Controller执行。
    • contentType:发送请求内容的序列化的格式,”application/json”表示JSON数据格式
    • andExpect: 添加RequsetMatcher验证规则,验证控制器执行完成后结果是否正确,或者说是结果是否与我们期望(Expect)的⼀致。
    • andDo: 添加ResultHandler结果处理器,比如调试时打印结果到控制台
    • andReturn: 最后返回相应的MvcResult,然后进行自定义验证/进行下⼀步的异步处理
  • @SpringBootTest 注解
    • 是⽤来创建Spring的上下⽂ApplicationContext,保证测试在上下⽂环境⾥运⾏。单独使用@SpringBootTest不会启动servlet容器。所以只是使⽤SpringBootTest 注解,不可以使用@Resource和@Autowired等注解进⾏bean的依赖注入(准确的说是可以使用,但被注解的bean为null)。
  • @ExtendWith(@RunWith注解)

    • RunWith⽅法为我们构造了⼀个的Servlet容器运⾏运⾏环境,并在此环境下测试。然⽽为什么要构建servlet容器?因为使⽤了依赖注⼊,注⼊了MockMvc对象,⽽在上⼀个例⼦⾥⾯是我们⾃⼰new的。
    • ⽽@AutoConfigureMockMvc注解,该注解表示mockMvc对象由spring 依赖注⼊构建,你只负责使⽤就可以了。这种写法是为了让测试在servlet容器环境下执⾏。

      六、Swagger3即OpenAPI使用

  • OpenAPI是规范的正式名称。规范的开发⼯作于2015年启动,当时SmartBear(负责Swagger⼯具开发的公司)将Swagger 2.0规范捐赠给了Open API Initiative,该协会由来⾃技术领域不同领域的30多个组织组成。此后,该规范被重命名为OpenAPI规范。

  • Swagger
    • 是⼀个 API⽂档维护组织,后来成为了 Open API 标准的主要定义者。现在最新的版本为17年发布的 Swagger3(Open Api3)。
    • 是⼀个Open API规范实现⼯具包,由于Swagger⼯具是由参与创建原始Swagger规范的团队开发的,因此通常仍将这些⼯具视为该规范的代名词。⽬前可以认为Swagger3就是 Open API 3.0。