news 2026/5/13 8:14:08

如何设计一个优秀的接口?统一结果返回值

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何设计一个优秀的接口?统一结果返回值

文章目录

  • ✨ 一、接口的统一返回值是什么?
  • ✨ 二、为什么要统一返回值?
  • ✨ 三、怎么做?(带代码实现)
      • 1. 先定义统一返回体 ResponseResult
      • 2. 在Controller层中用
      • 3. 全局异常统一放回

✨ 一、接口的统一返回值是什么?

它是一件外套,把所有接口的返回内容装进同一套格式里。无论请求成功还是出错,都给前端返回固定结构,比如:

{"code":200,"message":"OK","data":{...}}

像讲故事时总是用“开头、正文、结尾”一样,你的接口也需要固定的句式,让对方不用猜今天你会不会突然换腔调。

常见结构会包含:

  • code业务状态码(不是 HTTP 状态码)

  • message提示信息(成功/失败原因)

  • data业务数据

  • timestamp(可选)响应时间

  • traceId(可选)链路追踪辅助

🎐 这让你的接口像带格式的礼物盒,不会乱七八糟。


✨ 二、为什么要统一返回值?

这一段像在写接口的“生存理由”:

  1. 前端更好处理
    前端只需要写一套判断逻辑,比如code === 200 OK。如果每个接口都长得不一样,前端会像解一个拼不出来的拼图。

  2. 调试更舒服
    报错结构一致,日志里查问题一眼看穿。

  3. 团队协作不会混乱
    新人写接口也不用再纠结“到底怎么返回”。

  4. 更适合大项目/中台
    各个服务统一语言,像所有人都用同一个字典。

  5. 可以扩展功能
    比如自动加 traceId、自动包装异常、全局异常处理等等,统一返回是基础。


✨ 三、怎么做?(带代码实现)

这一步像搭一座小桥,把规范送到所有接口上。


1. 先定义统一返回体 ResponseResult

@DatapublicclassR<T>{privateIntegercode;privateStringmessage;privateTdata;publicstatic<T>R<T>success(Tdata){R<T>r=newR<>();r.setCode(200);r.setMessage("success");r.setData(data);returnr;}publicstatic<T>R<T>fail(Stringmessage){R<T>r=newR<>();r.setCode(500);r.setMessage(message);returnr;}}

2. 在Controller层中用

@GetMapping("/user/{id}")publicR<User>getUser(@PathVariableLongid){Useruser=userService.getById(id);returnR.success(user);}

3. 全局异常统一放回

@RestControllerAdvicepublicclassGlobalExceptionHandler{@ExceptionHandler(Exception.class)publicRhandleException(Exceptione){returnR.fail(e.getMessage());}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 21:16:21

【MCP 2025量子编程认证新动向】:深度解析新增核心模块与学习路径

第一章&#xff1a;MCP 2025量子编程认证概述MCP 2025量子编程认证是微软推出的全新技术资格认证&#xff0c;旨在评估开发者在量子计算理论与Q#语言实践中的综合能力。该认证面向具备一定量子力学基础和编程经验的技术人员&#xff0c;涵盖量子门操作、量子算法设计、量子电路…

作者头像 李华
网站建设 2026/5/9 1:09:27

大模型应用开发(十四)_LangChain 多轮对话

9. LangChain 多轮对话 在传统的单次问答中&#xff0c;每次请求都是独立的。但在多轮对话中&#xff0c;模型需要记住之前的对话历史&#xff08;即“状态”或“记忆”&#xff09;才能理解当前的问题。例如&#xff1a; 用户&#xff1a;“我喜欢吃意大利面。”用户&#xf…

作者头像 李华
网站建设 2026/5/9 1:09:28

Blender 3MF插件终极使用指南:从安装到故障排查全流程解析

Blender 3MF插件终极使用指南&#xff1a;从安装到故障排查全流程解析 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 想要在Blender中轻松处理3D打印格式文件吗&#xf…

作者头像 李华
网站建设 2026/5/14 4:02:17

【PHP性能革命】:PHP 8.6 JIT编译器真实表现,9个关键指标全面对比

第一章&#xff1a;PHP 8.6 JIT性能革命的背景与意义PHP 作为长期服务于 Web 开发领域的主流脚本语言&#xff0c;其执行效率始终是开发者关注的核心议题。随着现代应用对响应速度和并发处理能力的要求不断提升&#xff0c;传统的解释执行模式逐渐显现出性能瓶颈。PHP 8.0 引入…

作者头像 李华
网站建设 2026/5/9 2:19:35

Linux系统编程——进程

目录 一、进程的定义与核心数据结构 1.进程的本质 2.进程控制块&#xff08;PCB&#xff09; 二、进程与程序的区别与联系 三、进程的虚拟内存布局 四、进程的分类 五、进程的状态与转换 六、进程调度机制 1.调度策略 2.上下文切换 七、进程管理常用命令 八、进程创…

作者头像 李华