【软件开发架构平台】CH10 RESTful API的实现

【软件开发架构平台】CH10 RESTful API的实现,第1张

请求和URL的重构

请求数据的获取

@RequestParam:获取URL中的查询参数值
@RequestBody:获取POST或PUT中对象的值
@PathVariable:获取URL中的参数值

参数校验

@Valid注解和@Validation注解

  • @Validation注解是SpringFramework中提供的验证机制,是JSR-303规范的一个变种,可以使用在类型、方法和方法参数上,但不能使用在类的成员属性上

  • @Valid注解是Hibernate框架提供的验证机制,符合JSR-303标准,比@Validation更强大,可以使用在类的成员属性上,所以也支持嵌套验证

  • SpringFramework默认使用@Validation注解进行参数校验

    • @NotNull和@Null 不能为空和必须为空
    • @NotEmpty 不能为空(包括null、字符串长度为0、集合大小为0)
    • @NotBlank 不能为空(包括null、字符串首位空格后为0)
Controller响应的重构

基本要求:状态码、错误码、数据封装

@Getter
//序列化时空的数据不会被包含
@JsonInclude(JsonInclude.Include.NON_NULL)
public class CommonResponse<T> implements Serializable {
    private int status;
    private String msg;
    private T data;

    private CommonResponse(int status){
        this.status=status;
    }
}

VO\DTO\DO\DAO\PO

VO:返回给前端进行View显示的对象
DTO:数据传输对象,一般用于业务逻辑层和控制器层的数据传输,对后端数据进行一定的封装,提高传输效率和隐藏实现
DO:领域对象,一般指业务逻辑层使用的对象,符合业务需求,和数据库中的表基本对应
PO:持久化对象,完全ORM中使用的对象,和数据库的表完全对应

响应数据的JSON序列化

  • 要求API的响应均要序列化为JSON(fastjson、jakson、Gson)
  • SpringBoot在Controller里加上@ResponseBody自动完成序列化
  • 使用统一响应

全局异常处理
使用@ControllerAdvice和@ExceptionHandler

@ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度
@ControllerAdvice:异常集中处理,更好的使业务逻辑与异常处理剥离开;对Controller层进行拦截

@ControllerAdvice
public class GlobalExceptionAdvice{
	@ExceptionHandler(value = Exception.class)
	@ResponseBody
	public ServerResponse<ExceptionResponse> handleException(Exception e){
		ServerResponse<ExceptionResponse> serverResponse = new ServerResponse<>();
		return serverResponse;
	}
用户认证与JWT

用户认证

前后端未分离架构中的会话跟踪:

  • Cookie、Session

分离后:

  • 浏览器无法自动使用Cookie、跨域问题或没有浏览器可用
  • 服务器进行系统架构后Session不便存储
  • Token机制
    • 在Web应用中访问资源的凭据
    • 用户请求登陆成功后,服务器基于某种机制生成一个字符串——token
    • token机制与session机制的主要区别是服务器是否存储
    • 之后的请求,客户端都可以带上token,服务器根据token进行用户认证
    • token机制要解决token的加密、解密、过期等问题
    • 广义上,sessionId也是token机制的一种实现

JWT(Spring Security中对其提供集成)

  • 定义了一种简洁的、自包含的、以JSON对象的形式进行安全传递信息的方法
  • 采用数字签名,可以被验证和信赖。且可以对数字签名进行加密。由Header(自描述)、Payload(存放实际需要传递的数据,包括标准字段和自定义字段)和Signature(对上述两部分的签名,防止数据篡改)组成。
  • 可以用于认证和数据传输,减少对服务器的访问
  • token只要发出后无法废止或修改
  • 包含认证信息,防止泄露应设置尽可能短的有效时间
  • 采用HTTPS协议传输
用户鉴权与OAuth

用户鉴权

  • 授权,指用户访问API的权限问题,主要用于第三方登录
  • OAuth:鉴权的开放标准
  • Spring Security OAuth2组件实现了OAuth规范

OAuth2四种授权方式:

  • 授权码
  • 隐藏式
  • 密码式
  • 客户端凭证

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/789070.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存