博客
关于我
当我们开发一个接口时需要注意些什么
阅读量:397 次
发布时间:2019-03-05

本文共 1390 字,大约阅读时间需要 4 分钟。

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

能完成正常的业务功能

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

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

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

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

异常处理

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

异常流程处理

正常的流程处理起来很简单,但是你一定要想到流程中断以后再进入,你的接口是否支持。比如用户忽然退出了页面,用户突然断网了,流程的每个环境都有可能出现问题。你要考虑到每个环节点出现问题要怎么处理,代码是否有容错性,是在系统不好解决的可以通知运营人员,哪怕进行人工解决,也是一种办法。

接口参数检查机制

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

打印准确合理的日志

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

接口权限配置

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

数据权限问题

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

接口性能优化

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

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

接口幂等性

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

接口自测的问题

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

一些其他细节

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

转载地址:http://giazz.baihongyu.com/

你可能感兴趣的文章
如何利用panel在一个窗口中实现诸多页面的显示
查看>>
51Nod 1084 矩阵取数问题 V2 双线程DP 滚动数组优化
查看>>
pku 1061 青蛙的约会 扩展欧几里得
查看>>
Spring Boot 2.4 配置文件将加载机制大变化
查看>>
WPF之全局快捷键
查看>>
javascript 用函数语句和表达式定义函数的区别
查看>>
基于react hooks,antd4 配置生成表单并自动排列
查看>>
也来玩玩 javascript对象深拷贝,浅拷贝
查看>>
【转载】Kubernetes CNI网络最强对比:Flannel、Calico、Canal和Weave
查看>>
Kubernetes实战总结 - 动态存储管理StorageClass
查看>>
Django实战总结 - 快速开发一个Web服务
查看>>
ApiTesting全链路接口自动化测试框架 - 实战应用
查看>>
Robot Framework 自动化框架大纲
查看>>
【DG】主rac + 备rac dg 部署
查看>>
【DG】物理DG中主库的LNSn、NSS、NSA进程的比较
查看>>
Oracle一次缩小表空间的处理过程
查看>>
数据库笔试面试题库(Oracle、MySQL等)
查看>>
【三思笔记】 全面学习Oracle分区表及分区索引
查看>>
【AIX】AIX内存机制
查看>>
造成错误“ORA-12547: TNS:lost contact”的常见原因有哪些?
查看>>