54chensongxia

作为一个 Web 应用开发人员,平时工作中最多的工作场景就是开发接口给前端调用或者关联系统调用。接口写了这么多,不知道大家有没有总结过在开发一个接口时需要注意哪些细节。下面列出我自己的一些总结,每次写接口时都用这些注意点“扫描”下自己的接口,你的接口质量将会上升一个台阶。

能完成正常的业务功能

这个点应该不用多说了,我们的接口就是为了完成业务功能的,这个是必须要的。

但如果你的接口仅仅考虑了正常的流程,一旦发生任何异常就运行不起来了,那么你的接口不是一个合格的接口。

如果所有用户请求都符合接口预期、所有网络调用都不会超时、所有系统都不会down机,所有系统都能承载大并发的流量,那么程序员的工作量将减轻一大半。“程序员大部分时间都在解决异常”,这句话我想你一定听过。

其实下面才是本文的重点,怎么让自己的接口有更高的健壮性、更高的性能以及更高的扩展性,这是我们开发接口中不容忽视的地方。

异常处理

在你这个接口涉及的每个环节,你都要考虑到会不会发生异常。如果异常发生了,你要怎么处理?你的数据要不要回滚?Service是不是已经开启了事物?事务的隔离级别是否正确?你的代码有没有全局异常处理机制?

接口参数检查机制

很多系统异常都是因为用户传的参数不对导致格式化错误、空指针错误等。所以我们要将错误扼杀在源头,对用户传过来的参数做严格的检查,在controller层做参数校验。这个可以结合Spring的Validate机制。

打印准确合理的日志

这边打日志的原则是不打多余的日志,打印的日志能让自己看清系统的运行状态,出问题是能迅速定位问题。

接口权限配置

你的接口哪些角色的用户可以访问,用户不登陆是否可以访问。

数据权限问题

如果你的接口是一个查询接口,你就不应该查出当前用户没有权限访问的数据。

接口性能优化

  • 使用缓存;
  • 数据库加索引;
  • 尽量不要在循环中调用数据库;
  • 尽量不要多张表关联查询;
  • 考虑使用异步线程;
  • 提升系统配置(穷途末路的方法)

提升接口性能的方法有很多,这边只是举了几个通用的列子。结合你具体的业务场景,有时调整下业务的执行流程也能大大提升用户体验。比如银行开户的流程可以分为授信和签约两步,其中授信是比较耗时的操作,那我们可以考虑在用户提交身份证材料时触发授信操作,用户提交完材料,授信操作可能已经完成了。

接口幂等性

考虑下你的接口是否要保持幂等

接口自测的问题

很多开发人员都不会想测试场景来测试自己的接口。我自己觉得我们想的测试场景要够全,甚至要比测试还多。我的建议是在开发环境一定要自己自测一下,自己想各种测试场景,造各种数据进行测试,同时将自己造的数据保存下来,方便后续用到。

一些其他细节

  • 如果涉及到分布式系统要考虑数据一致性问题。
  • 扩展性优化,你的代码是否有很好的扩展性。
  • 开发环境改了代码,一定要到测试环境测试一下。(因为测试环境和开发环境可能有很大的区别,比如jdk版本,代码不一定能跑起来)

相关文章: