你是这么写接口的么

简介: 你是这么写接口的么

本文是来自一位前端人员的吐槽,笔者自己在做接口测试的时候,也会发现各类不太合理的接口定义,看看前端人员怎么说。

相信很多开发经理,尤其是Java开发主管都会遇到这样的人,有的工程师被招进来,没干两个月就跑了,你问他,他就说只写写接口,没啥挑战,没有前途,于是就离职了,但是当你去看看他写的代码,发现真的“很烂”,一个连接口都写不好的人,还抱怨没有挑战,连基本的事情都做不好,有什么资格做更“牛逼”的工作呢?

一个接口可以10分钟搞定,复杂的搞个一周都有可能,有时我们在项目中可能急于完成任务,而忽视了其他方面,但,我认为有些问题是可以提前避免的。

01


接口能实现功能就可以了吗?如果这样,那么上图中的骚操作可以满足大部分场景,或者前端把数据库表传给后端,后端直接把表中数据查出返回就可以了,这种“数据中转工程师”的确没啥前途。

什么是好的接口?

一个能满足需求实现的接口远远达不到“好”的标准,我相信大部分的Java工程师都可以写出满足需求实现的接口,但是并非所有人都能写出好的接口。

我相信,好的接口具有:良好的结构,精简的数据,自洽的逻辑和清晰的调用关系,规范的路由,易懂的代码,快速的响应,完善的异常处理,周到的场景覆盖,易扩展且稳定运行... ...

and more!

02

问题一:凌乱地返回信息

  • 不需要的信息不要返回,不是一股脑把所有信息返回让前端按需使用。
  • 命名要简洁,比如listObject可以改成list, itemCount改为count或total
  • 字段要达意:dashBoardAuth, isAllAuth, isAuthDataset几个都是认证权限相关的,可以放在一起:

auth:{
    dashboard : true,
    all : 0,
    dataset : 0
}

返回信息凌乱,并不会造成功能不可用。凌乱是指很多没用的字段,结构混乱等,理论上无论结构有多混乱,字段里有多少干扰,前端都可以取得到数据,无非多做一些澄清和确认,多做一些格式转换,但清晰的结构,仅返回有用的字段,会使后期理解和维护过程变得更加容易。

如果返回的信息不凌乱,前端后对接会变得更加和谐和默契。

笔者注:过多的返回值,也会引发性能、网络、安全等一系列问题,需要引起重视。

问题二:命名不合理

permission和privilege的含义重复,应该简写为:permissions.view,命名除了统一风格(匈牙利风格,驼峰风格等)外,还要尽可能简化,不要有错误的英文,能简化的尽量简化,不要啰唆,结构的层次可以分层地表达含义,没必要在后面的层级中再加上父层的含义。

比如在接口路径中,实际项目中常常存在这种情况:

上面的路径不够简洁,dashboard/group/dashboardTreeList 这个路径中有两相dashboard,前者已经指明了此接口是/dashboard/模块下的,后面就不需要再出现了,应改为:dashboard/group/treeList

笔者注:这个是规范的问题,产品级的系统,还是要注意规范化编码,减少人为障碍。

问题三:路由风格要统一 

接口风格不统一,有些是Rest风格的,有些不是Rest风格的

问题四:所有接口全部合成一个

上图是某项目的销售简报,从电商迁移过来的,一个页面中有多个图表,但全部用一个接口查询返回,我想大部分人都知道这会造成性能问题,不仅后端服务器有压力,也没有很好地利用浏览器的并发请求能力,对界面渲染也不友好。

笔者注:按模块给接口,既可以充分利用HTTP的并发能力,也可以很好地实现首频加载之类的性能优化,不能为了减少请求而合并接口。

问题五:数据格式问题

数据格式不规范,数字不要加引号

数据格式前端处理,数据库里也不要存成文本,不要进行单位转换(如转成万、亿等),后端不要对小数位数做处理,这些操作都应前端处理。

为什么前端处理这种格式呢?因为UI和用户需求是经常变的,如果某天用户把小数位数由保留1位改成保留2位小数,前端修改起来要容易得多,而且部署也不会造成服务器重启,只用刷新浏览器即可。

现在前端多是基于SPA的前后端分离地开发,打包多会有HASH码,很少会影响页面访问,但放在后端处理就困难得多。

相关文章
|
人工智能 网络性能优化 异构计算
阿里云基础网络技术5篇论文入选全球网络顶会NSDI
阿里云在NSDI 2025会议上发表5篇主会论文,涵盖大模型训练网络故障诊断、仿真、性能优化及CDN流控算法等领域。其中,《Evolution of Aegis》提出两阶段演进路线,显著降低故障诊断时间;《SimAI》实现高精度大模型训练模拟;其他论文分别在CDN拥塞控制、GPU解耦推理和容器网络性能优化上取得突破。这些成果为AI大模型时代的云计算基础设施发展提供了重要支持。NSDI是计算机网络与系统研究领域的顶级会议,本次录取率仅12.5%。
|
3月前
|
人工智能
Qoder Together 成都站:解码传统研发团队的 AI 转型路径
4月28日10:00-12:00,成都天府长岛数字文创园路演厅,聚焦AI研发转型:深度解析Qoder产品、ERP团队AI Coding落地实践及AI原生工程与团队建设。速报名→ https://huodongxing.com/event/1856749707111
212 0
|
存储 Kubernetes 中间件
【中间件-keycloak】第一次改开源中间件keycloak总个结
【中间件-keycloak】第一次改开源中间件keycloak总个结
1072 102
【中间件-keycloak】第一次改开源中间件keycloak总个结
|
Kubernetes Java API
软件版本号解读(语义化SemVer、日历化CalVer及标识符)
软件版本号解读(语义化SemVer、日历化CalVer及标识符)
737 3
软件版本号解读(语义化SemVer、日历化CalVer及标识符)
|
机器学习/深度学习 监控 算法
【传知代码】高速公路车辆速度检测软件-论文复现
该项目是高速公路车辆速度检测软件,融合了无人机、计算机视觉(YOLOv8)和机器学习,用于交通监控和数据收集。它通过无人机航拍获取车辆信息,使用Bytetrack进行跟踪,SG滤波器处理数据,计算速度和加速度,并将数据存储在Excel中。软件包含检测器、跟踪器和注册表组件,可在Pycharm环境中运行。部署时需配置相关依赖,通过主程序`main.py`启动,用户需标定参考距离、ROI和坐标系。随着技术进步,此类系统有望在交通管理中发挥更大作用。参考文献包括YOLOv8和ByteTrack的相关研究。源码和详情见原文链接。
455 0
【传知代码】高速公路车辆速度检测软件-论文复现
|
存储 数据可视化 数据挖掘
如何为多个变量绘制联合分布图(pairplot)?
本文介绍基于Python中seaborn模块,实现联合分布图绘制的方法~
1128 1
如何为多个变量绘制联合分布图(pairplot)?
解决 cnpm : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本。
解决 cnpm : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本。
3395 0
|
安全
组织让怀疑论者加入数字化转型的6种办法
哈佛商业评论分析服务公司在最近发布的一项研究报告中指出,“难以适应不断变化的商业环境的企业文化是组织数字化转型努力失败的首要原因,其关注程度超过了IT预算受限和运营成本增加。”
291 0