如何写好一个接口

考虑兼容性问题

【背景】不同于web、小程序等,移动端APP存在多个版本共存的情况。每个版本原生部分会进行版本迭代,后端也会进行。但是用户可能比较懒,仍然使用版本的APP不进行升级。对于已经升级后的后端,后端代码需要考虑如何兼容多个版本的APP。尤其是对于界面部分的变化。

1、前端传递版本号字段,根据版本号设定不同的代码逻辑

接口URL:api.xxx.com/api?versionid=v1&..

if(versionid != null){
    //在前端传过来的字段中增加一个版本号字段,如果不为null。那么就走新接口
}esle{
    // 旧的接口
}

优点: 实现简单,
缺点: 代码结构被破坏掉了,存在用户多个版本的,必然代码结构很不好。

2、大版本强制更新,小版本考虑更新 (强制更新也是在原生部分进行更新)
这种方式对于小版本完全不推荐,用户体验特别不好。

3、根据不同的版本,调用不同的接口。

版本1 == login/login/v1  
版本2 == login/login/v2
版本3 == login/login/v3

优点:分支版本之间相互独立,代码也容易维护。
缺点:代码量大,增加维护的工作量

4、如果条件允许,可以部署多台服务器,不同的版本接口对应不同的站点服务器。 根据Ngnix 或者 APIGateway进行请求的分发,分发给对应的站点服务器。

5、其实数据库表的兼容性也是如此,尽量增加字段而不是修改字段。

6、如果改动很大,很难做到兼容性,那么就得强制性升级了。

其他维度对一个接口的好坏进行设定?

1、 resultful 风格

2、前后端数据分离

3、版本控制(兼容性控制)

4、错误码的定义

5、安全性控制,http还是https

6、接口的种类:

(1)普通接口
 后端提供给前端调用的接口。 一般是http协议,对于登录是https ?
(2)提供给关联方调用的接口
方式1:直接http调用
方式2:通过dubbo来实现
开通防火墙,配置是否采用https协议,安全证书? 需要一个auth验证?
如果是外部接口呢?比方说公共接口,提供给外网所有其他系统调用,应该 怎么办?
(3) 调用其他系统的接口

接口之间的调用

现在业界流行的微服务之间是相互独立部署的,从大的讲每个系统可以看成一个微服务,不同服务之间需要相互通信,常用的手段是同步的HTTP/REST 、远程服务调用(Dubbo)或者异步方式的ActiveMQ方式。简单点都是直接http调用,但是会出现的问题是如果调用失败怎么办? 所以如果有多实例部署的情况下,还是选择使用dubbo方式,接口提供方作为生产方,接口调用方作为消费者,使用Zookepper作为注册中心,实现对接口的注册和发布,如果提供的某个接口失败了,就会换另外一个接口。

7、接口效率问题的考虑。效率过低直接导致用户体验过慢。一般会出现的问题,数据库查询层面。也有可能是调用第三方接口响应过慢导致的。

8、接口的并发调用,如果多个用户同时操作某个功能。会不会导致并发问题。

9、防重复点击问题?不是每一次点击都是一次调用吗?下订单,点击多次,接口的幂等性问题是如何解决的? 

10、接口如何支持异步调用,如何支持大量请求调用、压力测试?

11、AsyncRestTemplate支持REST客户端的异步无阻塞请求。

12、接口隔离原则

如果把这些点考虑进去了,接口设计是一个很完美的事情。

13、接口限制流量。秒杀系统或者某个接口被人一顿逛调,调死了怎么办?
限流 和 熔断服务降级之类的操作。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值