3.1 MVC控制器

1、什么是控制器
控制器,是MVC中的部分C,用于接收客户端的请求并进行响应,如图6.1 - 01 所示。

  • 接收客户端的请求,收集、验证请求参数并绑定到命令对象。
  • 将命令对象交给业务对象,由业务对象处理并返回模型数据。
  • 返回ModelAndView(Model部分是业务对象返回的模型数据,视图部分为逻辑视图名),即将业务层处理结果返回给表现层,表现层由视图对处理结果进行渲染,渲染完成后响应给客户端。

image.png

2、Spring MVC 控制器
在开发过程中,Servlet类就是一个控制器,Servlet是基于类的控制器,即请求映射配置到Servlet类。而Spring MVC控制器是基于方法的,请求映射到方法级。即控制器都是方法,只需要对控制器类的方法配置映射。

3.2 Web API 接口

1、Web API
WebAPI 是一种用来开发系统间接口、设备接口 API 的技术,基于 Http 协议,请求和返回格式结果默认是 json 格式。即明确了请求方式,提供对应后台请求url链接、请求所需参数,可以得到后台的响应数据。
如获取地理信息:https://way.jd.com/huoxin/here?lat=39.9928&lng=116.3961&cst=1

  • 请求方式:GET
  • 请求协议:https
  • 请求URL:way.jd.com/huoxin/here
  • 请求参数:{lat:39.99928,lng:116.396:cst:1}
  • 请求结果:

image.png
2、RESTful API
REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”。
例如:
WEB API : http://localhost:8080/admin/getUser?id=100 (查询用户编号为100的用户)
RESTful API: http://localhost:8080/admin/getUser/100 (查询用户编号为100的用户)
(1)请求方式

  • GET:查询
  • POST:新建
  • PUT:修改全部字段
  • PATCH:修改部分字段
  • DELETE:删除

考虑到系统安全性,不推荐使用PUT、PATCH、DELETE。
(2)版本号
命名版本号可以解决版本不兼容问题,在设计 RESTful API 的一种实用的做法是使用版本号。一般情况下,我们会在 url 中保留旧版本号,并同时兼容多个版本。
例如:
【GET】 /v1/users/{user_id} // 版本 v1 的查询用户列表的 API 接口
【GET】 /v2/users/{user_id} // 版本 v2 的查询用户列表的 API 接口
(3)资源路径
URI 不能包含动词,只能是名词(命名名词的时候,要使用小写、数字及下划线来区分多个单词)。
资源的路径应该从根到子依次如下:
/{resources}/{resource_id}/{sub_resources}/{sub_resource_id}/{sub_resource_property}
【POST】 /v1/users/{user_id}/roles/{role_id} // 添加用户的角色
(4)查询参数
RESTful API 接口应该提供参数,过滤返回结果。
【GET】 /{version}/{resources}/{resource_id}?offset=0&limit=20
(5)返回参数
JSON格式:

  • code:状态码
  • msg:提示信息
  • data:返回数据

(6)状态码
使用适合的状态码很重要,而不应该全部都返回状态码 200。
状态码,可根据以下标准按照项目扩展自身状态码:
200~299段 表示操作成功【200 操作成功,正常返回。201 操作成功,已经正在处理该请求】
300~399段 表示参数方面的异常【300 参数类型错误。301 参数格式错误。302 参数超出正常取值范围。303 token过期。304 token无效】
400~499段 表示请求地址方面的异常【400 找不到地址】
500~599段 表示内部代码异常【500 服务器代码异常】

3.3 返回结果接口规范

1、约定JSON格式
现在我们做项目基本上都是选择前后端分离,在互联网、移动互联网、物联网繁荣的今天, 各种客户端设备层出不穷,为了能用同一套服务端程序处理各种客户端的访问,我们就要和前端约定统一的api接口返回json 格式。HTTP Restful API变得流行起来。
但是客户端与服务端交互时,往往会有一些通用的需求,比如:

  • 服务端返回的报文,有一套统一的标准,这样有利于开发和维护。
  • 服务端在处理一个 API 请求时,如果出异常了, 总是希望在请求的返回结果中给出一个明确的错误码, 客户端可以根据错误码作进一步的处理。

image.png

  • code : 状态码,状态码的值及具体含意由项目中客户端与服务端约定。
  • msg:返回状态信息。
  • data : 实际的业务数据,内容由每个 API 的业务逻辑决定。

    3.4 Spring Boot控制器与API接口测试

    1、编写控制器
    在Spring Boot框架中,通过注解类,加载特定的控制器,即控制器就是一个加注解的类。控制器的注解有四种,如表所示。
    表6.1 - 01 控制器注解
    image.png
    【例】编写控制器。
    在src/main/java/目录下创建com.example.demo.controller包,所在控制器存放在该包下。
    image.pngimage.pngimage.png
    image.pngimage.png
    EmployeeController.javaRespBean.javaRespPageBean.java