• 如何写好一个接口


    接口设计

    • 不管是产品设计,技术设计,还是接口设计,
      尽可能保持简单。Less is more。
      越简单的设计,越可靠。如无必要,勿增实体。
    • 接口要注意拓展性,设计得灵活一些,应对业务的变化。
    • 字段尽量不要耦合在一起。
    • 接口尽量通用。能调用一次完成的,不用调用两次。网络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

  • 相关阅读:
    React 其他常用Hooks
    Solidity智能合约开发 — 4.1-合约创建和函数修饰器
    中科新生命峰会预告 | 大咖云集,共襄单细胞多组学及空间组学峰会
    3D成像 3D图映射
    第5周学习:ShuffleNet & EfficientNet & 迁移学习
    重装系统后新建文本文档打不开怎么办
    flask-smorest 库
    【Java框架】SpringMVC(二)——SpringMVC数据交互
    第9章:React Hooks
    基于libcurl+libopenssl开源库编译出curl下载工具及代码集成curl功能
  • 原文地址:https://blog.csdn.net/sinat_32502451/article/details/133715927