专栏首页京东技术JDL-GateWay物流网络SDK的设计与使用

JDL-GateWay物流网络SDK的设计与使用

2860元腾讯云代金券免费领取,付款直接抵现金,立即领取>>>

腾讯云海外服务器1折限时抢购,2核4G云主机661元/3年,立即抢购>>>

腾讯云服务器1折限时抢购,2核4G云主机661元/3年,立即抢购>>>

本文主要介绍京东物流网关前端插件的设计及使用方法,通过该插件的引入,可以轻松实现不同环境下服务域的接入,插件以axios为基础,前端开发零成本接入。

背景

在实际的业务开发中,我们往往需要对接不同的业务线, 然而从安全规范来说,需要接入网关层进行统一处理。接入服务网关层可以实现接口数据的统一管理, 接口格式的规范化、权限的控制、安全认证、路由负载均衡等。

作为前端开发来说, 不同的环境、不同用户账户需要进行不同网关的处理工作,为此我们开发了一套基于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的登录跳转。

其实现原理的流程图如下所示,其中主要的实现为:

1.在请求拦截器中对url进行处理,根据不同环境对URL拼接对应的服务域, 设置header字段包括lop-dn的设置。

2.在响应拦截器中,进行401的跳转判断处理。

3.考虑的插件的灵活性允许第三方配置服务域或者跳转地址。

安装

npm install @jdl/axios-gateway --registry=http://registry.m.jd.com

使用方法

网关插件的引入方式如下代码所示, 考虑到实际业务中仍存在一些没有接入网关的接口, 建议采用axios.create创建一个新的axios对象,然后在该对象的基础上进行插件的封装。通过axiosGW方法的调用生成的是一个单例模式的插件,项目场景是一种用户类型的话采用该方案。在插件使用过程中,有用户反馈他们的项目同时存在erp inner_erp希望可以提供多实例模式, 此时可以采用axiosGW.create的方式。axiosGW.create允许配置多个实例。

import axios from 'axios'
import axiosGW from '@jdl/axios-gateway';


const instance = axios.create({
  timeout: 5000
})


const config: any = {
  env: process.env.NODE_ENV,
  domain: process.env.VUE_APP_GW_DOMAIN,
  appid: process.env.VUE_APP_GW_APPID,
  appType: 'pc',
  clientInfo: {
    appName: process.env.VUE_APP_GW_APPNAME,
    client: 'pc'
  },
  loginDomain: process.env.VUE_APP_LOGIN_DOMAIN,
  loginType: process.env.VUE_APP_LOGINTYPE,
  stopLogin: true
}



axiosGW(instance, config)
export default instance

config属性

config字段的配置如下, 每个字段的作用及是否必选都有相应说明

网关的配置

通过设置loginType字段, 实现不同账户不同配置。目前支持passport、erp 、inner_erp(内网ERP调用网关)、 tls_inner_erp(tls内网ERP调用网关)。

第三方网关环境域名内置方式

企业咚咚联系星云技术支持总群 进行配置文件扩展 配置文件格式如下:

'erptest': {
    domains: {
      development: 'https://test-XXX.jd.com',
      prepare: 'https://uat-XXX.jd.com',
      production: 'https://lop-XXX.jd.com'
    },
    loginUrl: function (options: any) {
      // 你的跳转地址
      return '//passport.jd.com/uc/login?ReturnUrl=XXXXXX'
    }
  }

目前支持登录方式

passport、erp 、inner_erp(内网ERP调用网关)、 tls_inner_erp(tls内网ERP调用网关)。

自定义登录跳转

默认status返回401时, 检查为用户未登录, 会触发登录跳转。如果你想自定义登录跳转的地址时, 有两种方案可选。

第一种 在配置文件中,设置changeLoginhref回调函数,如下示例:

{
  changeLoginhref: function (response, options) {
    return '//www.jd.com'
  }
}

通过该回调可进行灵活配置。

第二种 您需要企业咚咚联系星云技术支持总群 (songali 或者 luobinbin5),进行配置设置。

LOP-DN设置

第一种 ,通过domain 进行全局的domain设置。

第二种 ,在axios请求中进行单条设置, 示例如下:

export function getQueryCod(data: any) {
  return axios({
    method: 'POST',
    url: '/logistics/getQueryCod',
    data,
    headers: {
      'LOP-DN': 'xxx.jd.com'
    }
  })
}

另一种方案,您可以对axios添加拦截器采用路由匹配规则,对LOP-DN进行批量分类设置。

自定义响应处理

如果您的response的返回结果并非 401表示未登录这样的模板结果, 您可以通过responseHandle回调方法进行自定义响应处理。 规范返回的结果中需包含status字段。

网关服务域外部配置方式

如果你的账户是非passport、erp 、inner_erp(内网ERP调用网关)、 tls_inner_erp(tls内网ERP调用网关);允许你采用外部配置的方式进行接入。当然我们更推荐内部配置的方案。其接入方式如下,确保你的gwEnvInfos字段中的key值与LoginType一致。

gwEnvInfos: {
    'yourPassport': {
      domains: {
        development: 'https://test-XXX.jd.com',
        prepare: 'https://uat-XXX.jd.com',
        production: 'https://lop-XXX.jd.com'
      },
      loginUrl: function (options: any) {
        // 你的跳转地址
        return '//passport.jd.com/uc/login?ReturnUrl=XXXXXX'
      }
    }
  }

关闭网关层

closeGw字段设置为true。

总结

设计公用插件库用来接入不同开发环境的数据, 这是前端框架中的一个基本点, 然而不同公司根据实际业务场景,会有一套自己的实现方案。针对我们这边业务的特点,JDL-GateWay采用axios拦截器的方案进行实现,开发者无需在axios的基础上进行额外学习,插件也比较方面扩展和维护。

文章或存在一些浅显不足之处, 欢迎大家评论指点。

本文分享自微信公众号 - 京东技术(jingdongjishu),作者:京东物流-宋啊礼

原文出处及转载信息见文内详细说明,如有侵权,请联系 [email protected] 删除。

原始发表时间:2021-06-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在Kubernetes上使用Istio Service Mesh设置Java微服务?

    最初于2018年11月17日在Medium发布。自此以来,该帖子已更新,可以使用最新版本的JHipster(6.3.0)和Istio(1.3.0)。

    灵雀云
  • 网易工业级WebRTC应用实践深度解析

    网易在音视频领域有10多年丰富经验的积累,在公司内部我们把自己的这一套工业级的功能完整的音视频技术方案称为NRTC,NRTC的意思就是NetEase RTC。近...

    LiveVideoStack
  • SDN实战团分享(二十八):VMware NSX技术分享

    Vmware是虚拟化技术的先驱者,其强大的计算虚拟化产品已经深入了各行各业的日常使用中。当然,如果没有网络虚拟化的支撑,计算的虚拟化是根本玩不转的。 Vmwar...

    SDNLAB
  • 设计、开发一个 Flutter Plugin 的实践心得

    我们要做的是在 Flutter 上实现实时音视频。那么在开始具体的工作之前,首先需要了解 Flutter 是如何调用诸如“获取媒体设备”这类原生平台 API 的...

    Android技术干货分享
  • Service Mesh · Istio · 以实践入门

    本文是笔者在学习官方文档、相关博客文章和实践过程中,整理了一些知识概念和自己的思考,主要在探索 lstio 的实际应用场景, Sidecar 原理, Servi...

    heidsoft
  • workman 和swoole 区别

    使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应...

    ITer.996
  • 干货 | 携程App网络服务通道治理和性能优化

    编者:本文作者为携程无线开发总监陈浩然。陈浩然,计算机博士,2008年iOS SDK发布后,投身移动互联网。先后在外企、创业型和国内一线旅游公司从事无线App的...

    携程技术
  • 使用Contour和Gateway API规划集群入口的未来

    Contour 项目文章作者:Nick Young、Daneyon Hansen 和 Alex Xu

    CNCF
  • 从网络演进看微服务演进

    版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转...

    月牙寂道长
  • 云原生应用负载均衡系列 (2): 入口流量分发、容错与高可用调度

    冉昕,腾讯云服务网格TCM产品经理,现负责云原生流量接入网关与应用通信可观测性等产品特性策划与设计工作。 引言 在云原生应用负载均衡系列第一篇文章《云原生应...

    腾讯云原生
  • 简单聊聊PayPal与BrainTree选型经历

    2019年9月30日,PayPal公司被批准通过对国付宝的股权收购正式进入中国。2019年12月19日晚间,PayPal公司正式宣布,已完成对国付宝信息科技有限...

    全菜工程师小辉
  • SDN实战团分享(二十四):Midonet简介

    Midonet是日本的Midokura公司开源出来的Neutron组网方案。Midokura早在2010年就开始做云中的网络虚拟化,他们最开始做Midonet是...

    SDNLAB
  • 花椒服务端 gRPC 开发实践

    在移动端平台开发中,为了增加代码复用,降低开发成本,通常会需要采用跨平台的开发技术,花椒也不例外。本次新的单品开发,由于时间紧,人员有限,经过调研选型,最终确定...

    CNCF
  • SDN实战团分享(五):基于VCS技术 + NSX 控制平台实现SDDC网络架构

    1.数据中心和新的网络架构需要软硬件一体化 看到前面的兄弟关于NSX架构的分享,感到收获良多,Vmware力争实现的平台是一种和硬件解耦,把大部分问题在虚拟化架...

    SDNLAB
  • 从60分到85分——SD-WAN进阶教程(下)

    SDNLAB
  • 腾讯5G物联开发套件与实践案例

    欢迎关注公众帐号“鹅厂网事”,我们给你提供最新的行业动态信息、腾讯网络最接地气的干货分享。 注1:凡注明来自“鹅厂网事”的文字和图片等作品,版权均属于“深圳市...

    鹅厂网事
  • Getting Started and Beyond|云原生应用负载均衡选型指南

    冉昕,腾讯云服务网格TCM产品经理,现负责云原生流量接入网关与应用通信可观测性等产品特性策划与设计工作。

    腾讯云原生
  • 基于云原生基础设施的后台架构设计思考

    作者:defooli??腾讯CSIG工程师 前言 在后台服务体系中,基础设施是运行在业务逻辑之下的计算、网络、存储资源以及通用的基础服务。如果没有完善的基础...

    腾讯大讲堂
  • Virtual Network Midonet闲扯

    下面呢介绍下Midonet由来,MidoNet是由日本的SDN公司Midkura研发的一款网络虚拟化软件,其基于底层 物理设施来实现网络虚拟化,具有分布式、分散...

    DevinGeng

扫码关注云+社区

领取腾讯云代金券

http://www.vxiaotou.com