同构直出项目中如何实现多终端的接口请求

蚊子前端博客
发布于 2020-03-09 17:15
抢金达人活动采用的是同构直出渲染方案,同时,主要是在新闻客户端和微信里运行。每个终端请求接口的方式都不一样,如何保证这些终端均能正常的进行接口请求呢?

抢金达人活动采用的是同构直出渲染方案,同时,主要是在新闻客户端和微信里运行。每个终端请求接口的方式都不一样,如何保证这些终端均能正常的进行接口请求呢?还能让开发者在 PC 端开发调试的过程中,也比较方便呢。

1. 面临的挑战

我们的项目,主要会从以下几个终端发起接口请求:

多终端多请求-蚊子的博客-蚊子的前端博客

首先我们应该梳理每个终端请求接口的特点,然后才能有效的改进。在表格中,即使都是新闻客户端,Android 新闻客户端和 iOS 新闻客户端,请求接口的 jsapi 调用方式也不一样。

终端数据请求方式
node 服务端透传 cookie/ua 等信息
Android 客户端jsapi-postData 方法
iOS 客户端jsapi-post 方法
微信、手 Q 端http 的 get 请求
手机浏览器http 的 get 请求
PC 浏览器方便调试

2. 改进方案

针对各个终端请求的不同特点,我这里也对请求接口的方式进行了封装。

多终端的接口请求-蚊子的博客-蚊子的前端博客

封装的原则是:

  1. 先根据 proces.browser 或者 typeof window 来判断当前是服务端还是客户端,若是服务端,则使用request 发起接口接口,并将传过来的 header 信息透传给接口;若是客户端,则通过 ua 来判断是在哪个终端中;

  2. 若在新闻客户端里或者极速版里,则再判断当前是 Android 系统还是 iOS 系统,分别调用对应的jsapi来发起请求;

  3. 若在微信、手 Q 端或者其他移动端浏览器,则使用前端的 fetch 或者XMLHttpRequest发起请求,跨域的话就使用 jsonp 的方式;

  4. 在 PC 浏览器上开发调试的时候,则使用前后端协作的方式;更多详细的内容可以查看【腾讯抢金达人项目中的前后端协作

同时我还为接口的请求添加上了请求量、耗时、错误率等监控信息,当接口发生异常时,方便协调后端同学一起定位问题。

装逼-蚊子的博客-蚊子的前端博客

3. 总结

我在这里对数据请求的方式,进行了组件化的封装。对外提供统一而稳定的调用方式,业务层无需关心当前的请求从哪个终端发起。所有的逻辑判断全部在数据请求组件内部进行处理。

你在逗我-蚊子的博客-蚊子的前端博客

标签:
阅读(604)

公众号:

qrcode

微信公众号:前端小茶馆