您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
JDL-GateWay物流网络SDK的设计与使用
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
JDL-GateWay物流网络SDK的设计与使用
自猿其说Tech
2021-05-13
IP归属:未知
419480浏览
计算机编程
前端
## 背景 在实际的业务开发中,我们往往需要对接不同的业务线, 然而从安全规范来说,需要接入网关层进行统一处理。 接入服务网关层可以实现接口数据的统一管理, 接口格式的规范化、权限的控制、安全认证、路由负载均衡等。 作为前端开发来说, 不同的环境、不同用户账户需要进行不同网关的处理工作,为此我们开发了一套基于axios的插件来适应不同的场景。 ## axiosGW 在进行插件开发时,放弃的之前基于内部封装的fetch库的实现,而且采用基于axios的方式进行实现。 主要优势axios的适用度更广,对于前端来说更容易上手,另外它的插件自身比较利于扩展。 axiosGW是基于axios实现的网关前端SDK插件, 目前支持passport、erp 、inner_erp(内网ERP调用网关)、 tls_inner_erp(tls内网ERP调用网关)。 它内置了配置方案,具有扩展性,可进行第三方模块的接入。 ## 设计模型 如下图所示, 针对不同账户不同环境我们分别进行划分。 账户类型包括passport、erp、内网erp等。 环境的话按照实际项目的开发可以分为development (开发)、prepare(预发)、production(生产)环境。 另外针对不同账户不同环境分别设置里401的登录跳转 ![](//img1.jcloudcs.com/developer.jdcloud.com/0fbb0fdb-3e24-4e40-af41-b22d1044ab4c20210513133824.png) 其实现原理的流程图如下所示,其中主要的实现为 1.在请求拦截器中对url进行处理,根据不同环境对URL拼接对应的服务域, 设置header字段包括lop-dn的设置。 2.在响应拦截器中,进行401的跳转判断处理。 3.考虑的插件的灵活性允许第三方配置服务域或者跳转地址。 ![](//img1.jcloudcs.com/developer.jdcloud.com/979e1ac9-df2d-40b2-b791-7678f726a8c520210513133923.png) ## 安装 ![](//img1.jcloudcs.com/developer.jdcloud.com/c4c616db-e21b-424f-b693-754c6f763bd320210513134118.png) ## 使用方法 网关插件的引入方式如下代码所示, 考虑到实际业务中仍存在一些没有接入网关的接口, 建议采用axios.create创建一个新的axios对象,然后在该对象的基础上进行插件的封装。 通过axiosGW方法的调用生成的是一个单例模式的插件,项目场景是一种用户类型的话采用该方案。 在插件使用过程中,有用户反馈他们的项目同时存在erp inner_erp希望可以提供多实例模式, 此时可以采用axiosGW.create的方式。 axiosGW.create允许配置多个实例。 ![](//img1.jcloudcs.com/developer.jdcloud.com/6adb0887-455d-4050-9d5b-43cbef63de8f20210513134157.png) ![](//img1.jcloudcs.com/developer.jdcloud.com/cb68cbc6-d69c-41fb-9841-8c8533d86b7720210513134225.png) ## config属性 config字段的配置如下, 每个字段的作用及是否必选都有相应说明 ![](//img1.jcloudcs.com/developer.jdcloud.com/181b576b-2f3a-4997-b84c-8f77d24feddb20210513134328.png) ![](//img1.jcloudcs.com/developer.jdcloud.com/7fb63d81-6570-47dc-8930-a67c6c5f805120210513134346.png) ![](//img1.jcloudcs.com/developer.jdcloud.com/f697bf05-900e-4aa0-9fe2-fc571b4de06220210513134358.png) ## 网关的配置 通过设置loginType字段, 实现不同账户不同配置。 目前支持passport、erp 、inner_erp(内网ERP调用网关)、 tls_inner_erp(tls内网ERP调用网关)。 ## 第三方网关环境域名内置方式 企业咚咚联系星云技术支持总群 进行配置文件扩展 配置文件格式如下 ![](//img1.jcloudcs.com/developer.jdcloud.com/a70c4ee1-2266-4a06-9876-8378493b511220210513134446.png) ## 目前支持登录方式 passport、erp 、inner_erp(内网ERP调用网关)、 tls_inner_erp(tls内网ERP调用网关) ## 自定义登录跳转 默认status返回401时, 检查为用户未登录, 会触发登录跳转。 如果你想自定义登录跳转的地址时, 有两种方案可选。 第一种 在配置文件中,设置changeLoginHref回调函数,如下示例 ![](//img1.jcloudcs.com/developer.jdcloud.com/756c7cff-b919-452b-88fd-89ae453f247120210513134547.png) 通过该回调可进行灵活配置。 第二种 您需要企业咚咚联系星云技术支持总群 (songali 或者 luobinbin5),进行配置是设置。 ## LOP-DN 设置 第一种 通过domain 进行全局的domain设置 第二种 在axios请求中进行单条设置, 示例如下 ![](//img1.jcloudcs.com/developer.jdcloud.com/85eec237-5b6f-41ea-9e3d-7fe1354fb82020210513134642.png) 另一种方案您可以对axios添加拦截器采用路由匹配规则,对LOP-DN进行批量分类设置。 ## 自定义响应处理 如果您的repsonse的返回结果并非 401表示未登录这样的模板结果, 您可以通过responseHandle回调方法进行自定义响应处理。 规范返回的结果中需包含status字段。 ## 网关服务域外部配置方式 如果你的账户是非passport、erp 、inner_erp(内网ERP调用网关)、 tls_inner_erp(tls内网ERP调用网关);允许你采用外部配置的方式进行接入。 当然我们更推荐内部配置的方案。 其接入方式如下,确保你的gwEnvInfos字段中的key值与LoginType一致。 ![](//img1.jcloudcs.com/developer.jdcloud.com/d4039101-78b4-4dee-83a4-d1e1fbc0ff1820210513134909.png) ## 关闭网关层 closeGw字段设置为true ## 总结 设计公用插件库用来接入不同开发环境的数据, 这是前端框架中的一个基本点, 然而不同公司根据实际业务场景,会有一套自己的实现方案。 针对我们这边业务的特点,JDL-GateWay采用axios拦截器的方案进行实现,开发者无需再axios的基础上进行额外学习,插件也比较方面扩展和维护。 文章或存在一些浅显不足之处, 欢迎大家评论指点。 ------------ ###### 自猿其说Tech-JDL京东物流技术发展部 ###### 作者:用户产品部-商家研发组 宋啊礼 ------------
原创文章,需联系作者,授权转载
上一篇:配运基础数据缓存瘦身实践
下一篇:Taro小程序跨端开发入门实战
相关文章
Taro小程序跨端开发入门实战
Flutter For Web实践
配运基础数据缓存瘦身实践
自猿其说Tech
文章数
426
阅读量
2149957
作者其他文章
01
深入JDK中的Optional
本文将从Optional所解决的问题开始,逐层解剖,由浅入深,文中会出现Optioanl方法之间的对比,实践,误用情况分析,优缺点等。与大家一起,对这项Java8中的新特性,进行理解和深入。
01
Taro小程序跨端开发入门实战
为了让小程序开发更简单,更高效,我们采用 Taro 作为首选框架,我们将使用 Taro 的实践经验整理了出来,主要内容围绕着什么是 Taro,为什么用 Taro,以及 Taro 如何使用(正确使用的姿势),还有 Taro 背后的一些设计思想来进行展开,让大家能够对 Taro 有个完整的认识。
01
Flutter For Web实践
Flutter For Web 已经发布一年多时间,它的发布意味着我们可以真正地使用一套代码、一套资源部署整个大前端系统(包括:iOS、Android、Web)。渠道研发组经过一段时间的探索,使用Flutter For Web技术开发了移动端可视化编程平台—Flutter乐高,在这里希望和大家分享下使用Flutter For Web实践过程和踩坑实践
01
配运基础数据缓存瘦身实践
在基础数据的常规能力当中,数据的存取是最基础也是最重要的能力,为了整体提高数据的读取能力,缓存技术在基础数据的场景中得到了广泛的使用,下面会重点展示一下配运组近期针对数据缓存做的瘦身实践。
自猿其说Tech
文章数
426
阅读量
2149957
作者其他文章
01
深入JDK中的Optional
01
Taro小程序跨端开发入门实战
01
Flutter For Web实践
01
配运基础数据缓存瘦身实践
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号