当前位置: 首页 > 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);
}

相关文章:

如何优雅的使用后端接口

优雅的后端接口 一个后端接口大致分为四个部分&#xff1a;接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响 应数据(response)。 一、URL & Method Rest 设计风格 》 Restful API 简单理解&#xff1a; URI 是用来唯一标志一个互联网资源&#xff1b;Me…...

QEMU源码全解析25 —— QOM介绍(14)

接前一篇文章&#xff1a;QEMU源码全解析24 —— QOM介绍&#xff08;13&#xff09; 本文内容参考&#xff1a; 《趣谈Linux操作系统》 —— 刘超&#xff0c;极客时间 《QEMU/KVM》源码解析与应用 —— 李强&#xff0c;机械工业出版社 特此致谢&#xff01; 本文开始对于…...

TopK问题

topK问题&#xff1a; N个数找最大或者最小的前k个。 例子&#xff1a; 优质筛选&#xff08;店面的排名&#xff09; 10000个数&#xff0c;找出最大的前10个数 解决思路&#xff1a;建立大堆&#xff0c;然后pop9次 但是有些场景&#xff0c;上面的思路…...

接口自动化测试-Postman+Newman+Git+Jenkins实战集成(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、Postman 创建…...

CMake 学习笔记 (Generator Expressions)

CMake 学习笔记 &#xff08;Generator Expressions&#xff09; Generator Expressions 可以认为是一种特殊的变量&#xff0c;它会在编译阶段求值。通常用在 target_link_libraries(), target_include_directories(), target_compile_definitions() 上。 用 Generator Expr…...

提高测试用例质量的6大注意事项

在软件测试中&#xff0c;经常会遇到测试用例设计不完整&#xff0c;用例没有完全覆盖需求等问题&#xff0c;这样往往容易造成测试工作效率低下&#xff0c;不能及时发现项目问题&#xff0c;无形中增加了项目风险。 因此提高测试用例质量&#xff0c;就显得尤为重要。一般来说…...

2023牛客暑期多校训练营6 A-Tree (kruskal重构树))

文章目录 题目大意题解参考代码 题目大意 ( 0 ≤ a i ≤ 1 ) , ( 1 ≤ c o s t i ≤ 1 0 9 ) (0\leq a_i\leq 1),(1 \leq cost_i\leq 10^9) (0≤ai​≤1),(1≤costi​≤109) 题解 提供一种新的算法&#xff0c;kruskal重构树。 该算法重新构树&#xff0c;按边权排序每一条边…...

软件测试—支付功能测试

有人问过我这样一个问题&#xff1a;作为一个支付平台&#xff0c;接入了快钱、易宝或直连银行等多家的渠道&#xff0c;内在的产品流程是自己的。业内有什么比较好的测试办法&#xff0c;来测试各渠道及其支持的银行通道呢&#xff1f; 回答&#xff1a;对支付平台而言&#…...

自动化测试的统筹规划

背景 回顾以前自动化测试编写的经历&#xff0c;主要是以开发者自驱动的方式进行&#xff0c;测试的编写随心而动&#xff0c;没有规划&#xff0c;也没有章法&#xff0c;这样就面临如下的一些问题&#xff1a; 测试用例设计不到位&#xff0c;覆盖不全&#xff0c;或者不够…...

外键字段的增删改查、多表查询(子查询和连表查询、正反向、聚合查询、 分组查询、 F与Q查询)、django中如何开启事务

一、 外键字段的增删改查 1.多对多的外键增删改查图书和作者是多对多&#xff0c;借助于第三张表实现的&#xff0c;如果想绑定图书和作者的关系&#xff0c;本质上就是在操作第三方表2.如何操作第三张表问题&#xff1a;让你给图书添加一个作者&#xff0c;他俩的关系可是多对…...

【学习笔记】生成式AI(ChatGPT原理,大型语言模型)

ChatGPT原理剖析 语言模型 文字接龙 ChatGPT在测试阶段是不联网的。 ChatGPT背后的关键技术&#xff1a;预训练&#xff08;Pre-train&#xff09; 又叫自监督式学习&#xff08;Self-supervised Learning&#xff09;&#xff0c;得到的模型叫做基石模型&#xff08;Founda…...

【Opencv入门到项目实战】(三):图像腐蚀与膨胀操作

文章目录 1.腐蚀操作2.膨胀操作3.开运算和闭运算4.礼帽与黑帽5.梯度运算 1.腐蚀操作 腐蚀操作是图像处理中常用的一种形态学操作&#xff0c;我们通常用于去除图像中的噪声、分割连通区域、减小目标物体的尺寸等。腐蚀操作的原理是&#xff0c;在给定的结构元素下&#xff0c;…...

Autosar诊断系列介绍20 - UDS应用层P2Server/P2Client等时间参数解析

本文框架 1. 前言2.几个时间参数含义2.1 P2Client与P2Server2.2 P2*Client与P2*Server2.3 P3Client_Phys与P3Client_Func2.4 S3Client与S3Server 1. 前言 本系列Autosar 诊断入门介绍&#xff0c;会详细介绍诊断相关基础知识&#xff0c;如您对诊断实战有更高需求&#xff0c;…...

【iOS】json数据解析以及简单的网络数据请求

文章目录 前言一、json数据解析二、简单的网络数据请求三、实现访问API得到网络数据总结 前言 近期写完了暑假最后一个任务——天气预报&#xff0c;在里面用到了简单的网络数据请求以及json数据的解析&#xff0c;特此记录博客总结 一、json数据解析 JSON是一种轻量级的数据…...

Kubernetes客户端认证—— 基于ServiceAccount的JWTToken认证

1、概述 在 Kubernetes 官方手册中给出了 “用户” 的概念&#xff0c;Kubernetes 集群中存在的用户包括 “普通用户” 与 “ServiceAccount”&#xff0c; 但是 Kubernetes 没有普通用户的管理方式&#xff0c;通常只是将使用集群根证书签署的有效证书的用户都被视为合法用户。…...

45.ubuntu Linux系统安装教程

目录 一、安装Vmware 二、Linux系统的安装 今天开始了新的学习&#xff0c;Linux,下面是今天学习的内容。 一、安装Vmware 这里是在 Vmware 虚拟机中安装 linux 系统&#xff0c;所以需要先安装 vmware 软件&#xff0c;然 后再安装 Linux 系统。 所需安装文件&#xff1a;…...

Jmeter函数助手(一)随机字符串(RandomString)

一、目标 实现一个请求单次调用&#xff0c;请求体里多个集合中的相同参数&#xff08;zxqs&#xff09;值随机从序列{01、02、03、03、04、05、06、07、08}中取 若使用CSV数据文件、用户参数等参数化手段&#xff0c;单次执行请求&#xff0c;请求体里多个集合中的相同参数&a…...

SpringCloud之微服务API网关Gateway介绍

文章目录 1 微服务API网关Gateway1.1 网关简介1.2 Spring Cloud Gateway介绍1.3 Gateway特性1.4 Gateway核心概念1.4.1 路由1.4.1.1 定义1.4.1.2 动态路由 1.4.2 断言1.4.2.1 默认断言1.4.2.2 自定义Predicate 1.4.3 过滤器1.4.3.1 默认过滤器1.4.3.2 自定义Filter&#xff08;…...

机器学习入门之 pandas

pandas 有三种数据结构 一种是 Series 一种是 Dataframe import pandas as pd import numpy as np score np.random.randint(0,100,[10,5])score[0,0] 100Datascore pd.DataFrame(score)subject ["语文","数学","英语","物理&quo…...

Django之JWT库与SimpleJWT库的使用

Django之JWT库与SimpleJWT库的使用 JWTJWT概述头部(header)载荷(payload)签名(signature) Django使用JWT说明jwt库的使用安装依赖库配置settings.py文件配置urls.py文件创建视图配置权限 SimpleJWT库的使用安装SimpleJWT库配置Django项目配置路由创建用户接口测试身份认证自定义…...

从停车场管理系统看STM32项目开发:如何规划你的第一个物联网硬件Demo?

从停车场管理系统看STM32项目开发&#xff1a;如何规划你的第一个物联网硬件Demo&#xff1f; 在嵌入式开发领域&#xff0c;STM32系列单片机因其出色的性能和丰富的外设资源&#xff0c;成为物联网硬件原型的首选平台。停车场管理系统作为一个典型的物联网应用场景&#xff0c…...

Prompt工程已进入“微秒级响应”时代:奇点大会实测数据显示——提示结构优化带来3.7倍推理吞吐提升

第一章&#xff1a;Prompt工程已进入“微秒级响应”时代&#xff1a;奇点大会实测数据总览 2026奇点智能技术大会(https://ml-summit.org) 在2026奇点智能技术大会上&#xff0c;全球首个面向生产环境的Prompt编译器——PromptLLVM v0.9正式发布&#xff0c;并同步公开其端到…...

终极glTF 2.0查看器:用Rust构建的高性能3D模型浏览器

终极glTF 2.0查看器&#xff1a;用Rust构建的高性能3D模型浏览器 【免费下载链接】gltf-viewer glTF 2.0 Viewer written in Rust 项目地址: https://gitcode.com/gh_mirrors/gl/gltf-viewer 想要在本地快速预览和查看glTF 3D模型吗&#xff1f;gltf-viewer正是你需要的…...

OpenMV+STM32串口通信避坑指南:从数据打包到LCD显示的完整流程(附源码)

OpenMV与STM32串口通信实战&#xff1a;从数据帧设计到LCD显示的避坑全攻略 引言 当你第一次尝试将OpenMV的识别结果通过串口传输到STM32并在LCD上显示时&#xff0c;大概率会遇到数据丢包、解析错误或显示异常等问题。这不是你的代码写得不够好&#xff0c;而是串口通信本身就…...

如何选择杭州GEO优化公司?2026年4月推荐评测口碑对比TOP7

据权威第三方Gartner预测&#xff0c;2026年搜索引擎访问量将下降25%&#xff0c;近四分之一的搜索流量向AI聊天机器人等新型载体转移&#xff0c;GEO&#xff08;生成式引擎优化&#xff09;已成为企业突破流量瓶颈、实现长期发展的核心战略。2026年4月&#xff0c;选择技术扎…...

【AI绘图进阶指南】Latent Diffusion Model核心组件解析——从理论到实践

1. 从像素到潜空间&#xff1a;Autoencoder如何重塑AI绘图 第一次接触Latent Diffusion Model&#xff08;LDM&#xff09;时&#xff0c;最让我困惑的就是&#xff1a;为什么要把好端端的图片压缩成看不懂的"潜空间"表示&#xff1f;后来在项目里踩过几次坑才明白&a…...

【Java Loom响应式转型终极指南】:20年架构师亲授3大性能跃迁关键点,错过再等5年?

第一章&#xff1a;Java Loom响应式转型的底层逻辑与时代必然性在高并发、低延迟、资源敏感型服务日益成为云原生基础设施标配的今天&#xff0c;Java传统线程模型正面临根本性挑战。每个 OS 线程默认占用 1MB 栈空间&#xff0c;且受限于内核调度粒度与上下文切换开销&#xf…...

PowerToys终极指南:5个技巧解决Windows效率工具常见问题

PowerToys终极指南&#xff1a;5个技巧解决Windows效率工具常见问题 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trending/po/PowerTo…...

GitHub中文化插件:如何让全球开发者平台真正属于中文用户?

GitHub中文化插件&#xff1a;如何让全球开发者平台真正属于中文用户&#xff1f; 【免费下载链接】github-chinese GitHub 汉化插件&#xff0c;GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 对于…...

mPLUG-Owl3-2B图文交互工具入门必看:上传→提问→解析三步闭环

mPLUG-Owl3-2B图文交互工具入门必看&#xff1a;上传→提问→解析三步闭环 本文约3800字&#xff0c;阅读时间约12分钟&#xff0c;包含完整操作指南和实用技巧 1. 工具简介&#xff1a;你的本地图文助手 今天给大家介绍一个特别实用的工具——mPLUG-Owl3-2B图文交互工具。这是…...