(偏工程一点,之后详看)
与执行本地方法不同,进行 HTTP 调用本质上是通过 HTTP 协议进行一次网络请求。网络请求必然有超时的可能性,因此我们必须考虑到这三点:
- 首先,框架设置的默认超时是否合理;(超时)
- 其次,考虑到网络的不稳定,超时后的请求重试是一个不错的选择,但需要考虑服务端接口的幂等性设计是否允许我们重试;(重试)
- 最后,需要考虑框架是否会像浏览器那样限制并发连接数,以免在服务并发很大的情况下,HTTP 调用的并发数限制成为瓶颈。(并发)
配置连接超时和读取超时参数的学问
几乎所有的网络框架都会提供这么两个超时参数:
- 连接超时参数 ConnectTimeout,让用户配置建连阶段的最长等待时间;
- 读取超时参数 ReadTimeout,用来控制从 Socket 上读取数据的最长等待时间。
Feign 和 Ribbon 配合使用,你知道怎么配置超时吗?
你是否知道 Ribbon 会自动重试请求呢?
- 有状态的 API 接口不应该定义为 Get。根据 HTTP 协议的规范,Get 请求用于数据查询,而 Post 才是把数据提交到服务端用于修改或新增。
- 选择 Get 还是 Post 的依据,应该是 API 的行为,而不是参数大小。
- 这里的一个误区是,Get 请求的参数包含在 Url QueryString 中,会受浏览器长度限制,所以一些同学会选择使用 JSON 以 Post 提交大参数,使用 Get 提交小参数。