1, 任何用户输入数据都有肯能是不可信或者不安全的, 前后端必须对接口入参中用户输入的数据进行校验, 后端参数验证可以考虑使用hibernate validation
2, 对外开放的openAPI 接口要做版本管理, 版本内的接口修改时要注意兼容性,
3, 接口要防止重复提交, 简单点,可以使用Redis防重复请求,同样的请求方,一定时间间隔内的相同请求,考虑是否过滤。转账类接口,并发不高的话,推荐使用唯一流水号作为主键或者唯一索引。
4, 设计接口时要充分考虑接口的可扩展性,适当重构接口,
5, 接口入参较多时, 考虑用结构体替代。
6, 长事务的接口, 如支付, 下单等接口,涉及业务较多, 主线流程外的业务尽量异步处理, 另外长事务可能导致死锁、回滚时间长、主从延迟等问题,开发中尽量避免大事务。
7, 调用第三方接口要考虑异常和超时处理, 以及失败重试, 失败重试可考虑用spring 的@retryable 注解
8, 一些需要缓存数据的查询接口, 为避免缓存击穿, 在查询不存在的数据时可以考虑缓存一个空数据,
9, 错误日志, 及debug日志一定要打,日志建议按照一定的规范去打印, 以便可以通过日志解析去做一些业务的异常监控
10, service 层的interface 的定义要具备功能单一性,
11, 接口耗时优化, 优先考虑是否有合理的添加索引, 另外不要想着一个sql 把所有的业务逻辑都做了, 涉及多表关联查询的, 可以拆分为多个单表查询。
12, 接口幂等性, 幂等处理优先考虑使用唯一索引。
13, 统计分析查询的接口, 巨量数据优先考虑使用olap 数据库,
14, 列表查询的接口, 巨量的数据表注意服务端分页, 建议通过注解实现服务端分页的组件, 不要手动去处理分页查询
15,接口返回建议统一封装, 合理定义对应返回的http 状态码, 业务错误码, 接口返回到前端的msg 信息注意国际化
16,涉及IO操作的接口, 注意要防止内存泄漏, 比如在finally 中记得要关闭打开的资源
17, 如果一个接口的service 层的方式超过50行, 那就要考虑优化业务的逻辑了,
18, 接口实现过程汇中,注意大文件、大事务、大对象,读取大文件时,不要Files.readAllBytes直接读取到内存,这样会OOM的,建议使用BufferedReader一行一行来。
注意一些大对象的使用,因为大对象是直接进入老年代的,会触发fullGC
19, 热点接口要考虑限流,
20, openapi 接口要考虑接口的安全性, 必须要先获取到token 和对应权限才能访问
21, 接口名称定义别想着自己能看懂, 别人也能看懂,
22, 接口测试,单元测试写不了, 总得用postman测下吧,
API接口设计总结
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...