👌如何设计好一个接口?

👌如何设计好一个接口?

这个问题是非常常见的一个问题。无论是在日常写代码的时候,还是实际面试的时候!

说实话,面试过很多人,上来一问,就是一句,没啥可以设计的,能正常使用查询即可,这种我都直接给他 pass 掉。

从设计接口的角度,主要需要遵循几个规范:

接口命名

命名的时候,别在那瞎搞,瞎起,不断增加后面人的理解成本,一定要见名知意。清晰,遵循开发规范。常见的规范可以直接参考阿里巴巴开发规范。不要觉得这些东西很麻烦,对于有经验的开发人员,大家遵守相同的规范,可以快速入手,一下子就明白,高手过招,无需多言。

接口设计的时候,遵循单一指责,不要做什么大而全的,比如下单并支付,千万别这么设计,createOrderAndPay。一定要做拆分,createOrder。payOrder。职责单一。

参数校验

好的接口,入参和出参的校验,一定要做好处理!参数前置校验做的好,在后面的核心业务代码,可以节省很多时间,核心业务代码,可以专注的处理业务逻辑。大家在开发过程中,有很多的时候,参数校验没做好,到业务代码,空指针等等问题,这些都是可以提前规避的。

对于出参的校验,做好错误码的定义。定义好具体的错误文案对应。要做友好的展示。不要提示参数错误,而是要提示具体的参数问题。

日志打印

关键日志必须打印打印打印!!!!经常有问题的时候,因为关键日志不打印,导致排查和理解的成本特别高,方法的入参和出参的日志可以通过拦截器来进行处理。

然后就是核心代码的关键日志。一定要打,比如经历了一些复杂逻辑的转换,关键的步骤打印日志。

打印日志要注意级别。error 、warn 、info 、debug。

公共包的,经历过大规模考验的 debug 即可。

普通业务就是 info。要注意,大 json 转换,加 isinfo 的判断,防止影响性能。

error 不要乱打,真错误的时候再打。蛇打七寸。

性能设计

对于核心接口设计的时候,必须有监控和异常的报警机制。tp99,qps,可用率。这些都要看到。

要考虑调用第三方接口,第三方的性能会不会影响自己,第三方失败的时候,如何进行处理。重试还是失败等等。

要不要加缓存,提升性能,要不要用多线程提升性能。要不要幂等,数据库压力等等都要考虑。

异常处理

一定要考虑接口的各种异常情况,应该产生的相关行为。要尽量预知做处理。不要产生不可控情况。相关校验做好。还有就是常见的你提供的接口的超时问题,要做好超时事件设置,自身也可以进行快速熔断返回。自身接口超时时间要小于上游接口。

注释

都给鸡哥写注释,别给鸡哥在这防御性编程,不写注释是一个非常坏的习惯!!到时候,你自己回过头可能都看不懂了。

限流/熔断

自己的接口要考虑好下下策,如果大流量来了,我们的服务是否能支撑的住,提前最好评估和限制调用方流量,防止自己什么都吃,导致服务整体直接不可用。极端情况也可以做熔断和快速失败,总之就是要保护好自己!

接口文档

写个清晰的接口文档,可以减少很多不必要的沟通和交流,一个好的接口文档,调用方的人,一看就懂,自然就不用浪费你的时间,教他传什么了。这种可以极大的减少沟通成本。

 wechat
天生我才必有用