如何写好一个接口
接口设计
- 接口要注意拓展性,设计得灵活一些,应对业务的变化。
- 字段尽量不要耦合在一起。
- 接口尽量通用。能调用一次完成的,不用调用两次。网络IO是很慢的。
- 接口的字段,尽量少一些,字段越多,越混乱,越难联调。
- 能批量处理,尽量批量处理。
- 如果不存在依赖关系,能异步处理,尽量异步处理。
- 状态变量,尽量不要连续,比如1234,可以用10,20,30,方便在中间新增状态变量。
- 常用的接口功能,一般有查询(列表),新增,修改,删除,详情,导入,导出。
查询列表页接口,不要跟详情页接口用同一个。
代码规范
- 下载代码规范插件,Alibaba Java Coding Guidelines 。遵循《阿里巴巴java开发手册》。
- 下载代码检查插件,SonarLint。
日志
-
关键的入参,最好打印日志,否则出了问题,很难定位。
-
关键的方法,在结束前,可以打印日志。方便定位问题。
-
异常日志,最好打印出异常的方法栈,以及对应的参数,能够还原现场,定位问题。
-
日志的级别要明确。关键的日志用 info级别,调试的日志用 debug 级别,错误日志用 error 级别。
特殊的if else分支可以用warn(比如判断用户id为空之类)。
分层
- 根据不同的项目,使用 Controller-Service-Dao, 或者 Controller--Service--Manager--Dao。
Manager层是通用的数据库CRUD(增删改查),而Service层则是由多种CRUD构成的业务逻辑。
对象参数
-
入参用 DTO,出参用 VO,数据库对应的用 Entity或者DO。
-
参数如果有很多个,最好封装成对象。
-
VO对象,哪怕是没有值的属性,最好也设置一个值,否则前端获取到对象后还得判断是否存在对应的属性。
参数校验
- 参数是否必需,缺少参数要提示。
- 字符串参数,是否可以为 null,是否可以为空字符串
- Integer参数,能否为 null,能否为空
异常处理
-
异常处理,返回用户能理解的异常提示。
-
如果有统一异常处理最好,如果没有,在控制层要处理好异常。
面向对象
面向对象编程和面向对象设计的五个基本原则。
-
Single Responsibility Principle(单一职责原则)
-
Open Closed Principle(开闭原则)
-
Liskov Substitution Principle(里氏替换原则)
-
Interface Segregation Principle(接口隔离原则)
-
Dependency Inversion Principle(依赖倒置原则)
详情见: https://blog.csdn.net/Taobaojishu/article/details/114313082
单元测试
- 最好写下单元测试,尽量提高覆盖率,减少线上问题。
在做重构的时候,有单元测试可以测试,不用担心重构出错。
线上出现问题,可以通过单元测试用例,快速测试。
对接第三方系统
- 对接第三方系统,往往会比较耗时。在初次查询第三方系统后,可以考虑能否做缓存处理、或者本地数据表存储。
- 对接第三方系统,关键的地方,最好记录日志。
接口性能优化
详情见:https://blog.csdn.net/sinat_32502451/article/details/133053399
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2018-03-21 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
2018-03-21 spring中Bean的作用域