当前位置: 首页 > news >正文

如何优雅的使用后端接口

优雅的后端接口

一个后端接口大致分为四个部分:接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响
应数据(response)。
一、URL & Method
Rest 设计风格 ===》 Restful API
简单理解: URI 是用来唯一标志一个互联网资源;Method 是用来标识当前请求对该资源进行什么操
作。
版本号、状态码、过滤信息、ContentType、Cookie 。。。
二、请求参数

1. 参数校验

比较常见的做法,在业务层进行参数校验:

POST /users
GET /users/{user_id}
PUT /users/{user_id}
DELETE /users/{user_id}
public String addUserV1(UserDTO userDTO) {
if (userDTO == null
|| userDTO.getId() == null
|| userDTO.getAccount() == null
|| userDTO.getEmail() == null
|| userDTO.getPassword() == null) {
return "对象或者对象字段不能为空";
}
if (StrUtil.isEmpty(userDTO.getAccount())
|| StrUtil.isEmpty(userDTO.getPassword())
|| StrUtil.isEmpty(userDTO.getEmail())) {
return "不能输入空字符串";
}
if (userDTO.getAccount().length() < 6 ||
userDTO.getAccount().length() > 11) {
return "账号长度必须是6-11个字符";
}
if (userDTO.getPassword().length() < 6 ||
userDTO.getPassword().length() > 11) {
}

不能说有什么错,而且格式排版整齐还一目了然,但是。。。。太繁琐!

2. Validator + BindResult

接下来只需要在接口需要校验的参数上加上 @valid 注解,并添加 BindResult 参数即可完成验证。
但是。。。每个接口都要添加 BindingResultResult 还是很烦!

3. Validator + 自动抛出异常

return "密码长度必须是6-11个字符";
}
if (!Pattern.matches("^[0-9a-zA-Z]+\\w*@([0-9a-zA-Z]+\\.)+[0-9a-zAZ]+$", userDTO.getEmail())) {
return "邮箱格式不正确";
}
return "success";
}
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Data
public class UserDTO {
@NotNull(message = "用户id不能为空")
private Integer id;
@NotNull(message = "用户账户不能为空")
@Size(min = 6, max = 11, message = "账户长度必须是6-11个字符")
private String account;
@NotNull(message = "用户密码不能为空")
@Size(min = 6, max = 11, message = "账户密码必须是6-11个字符")
private String password;
@NotNull(message = "用户邮箱不能为空")
@Email(message = "邮箱格式不正确")
private String email;
}
@PostMapping("/v2/user")
public String addUserV2(@RequestBody @Valid UserDTO userDTO, BindingResult
bindingResult) {

// 如果有参数校验失败,会将错误信息封装成对象组装在 BindingResult 里

for (ObjectError error : bindingResult.getAllErrors()) {
return error.getDefaultMessage();
}
return userService.addUserV1(userDTO);
}

没有最好的标准,但是一个规范的接口肯定比没有约束的接口要来的优雅。

@PostMapping("/v3/user")
public String addUserV3(@RequestBody @Valid UserDTO userDTO) {
return userService.addUserV1(userDTO);
}
http://www.lryc.cn/news/108862.html

相关文章:

  • QEMU源码全解析25 —— QOM介绍(14)
  • TopK问题
  • 接口自动化测试-Postman+Newman+Git+Jenkins实战集成(详细)
  • CMake 学习笔记 (Generator Expressions)
  • 提高测试用例质量的6大注意事项
  • 2023牛客暑期多校训练营6 A-Tree (kruskal重构树))
  • 软件测试—支付功能测试
  • 自动化测试的统筹规划
  • 外键字段的增删改查、多表查询(子查询和连表查询、正反向、聚合查询、 分组查询、 F与Q查询)、django中如何开启事务
  • 【学习笔记】生成式AI(ChatGPT原理,大型语言模型)
  • 【Opencv入门到项目实战】(三):图像腐蚀与膨胀操作
  • Autosar诊断系列介绍20 - UDS应用层P2Server/P2Client等时间参数解析
  • 【iOS】json数据解析以及简单的网络数据请求
  • Kubernetes客户端认证—— 基于ServiceAccount的JWTToken认证
  • 45.ubuntu Linux系统安装教程
  • Jmeter函数助手(一)随机字符串(RandomString)
  • SpringCloud之微服务API网关Gateway介绍
  • 机器学习入门之 pandas
  • Django之JWT库与SimpleJWT库的使用
  • Jmeter远程服务模式运行时引用csv文件的路径配置
  • 《OWASP代码审计》学习——注入漏洞审计
  • Linux虚拟机中安装MySQL5.6.34
  • Django的FBV和CBV
  • [每周一更]-(第57期):用Docker、Docker-compose部署一个完整的前后端go+vue分离项目
  • springboot-mybatis的增删改查
  • HTML5(H5)的前生今世
  • 抽象工厂模式(Abstract Factory)
  • Java 实现下载文件工具类
  • C# 12 预览版的新功能
  • 34.利用matlab解 多变量多目标规划问题(matlab程序)