如果一个正在运行的产品要接入 engage ,engage 平台对后端代码有一定的改造要求。比如,接入 engage 平台时需要做 api 权限校验、openApi 请求加解密、必须提供应用绑定 openApi 等,也就是说已有服务接入 engage 平台必须要做代码改动。为了降低后端应用接入 engage 平台的改造代价,现提供一种快速接入方案。

# 方案

搭建中间层 BFF 服务,该服务主要提供对 api 请求登录信息集成、权限验证,对 openApi 请求验证签名、加解密数据等能力,这些能力都被集成在 @engage/bff 包内,开发人员引用即可。BFF 服务搭建完成后,用户不再直接请求后端服务,而是请求BFF服务,BFF服务会对请求做权限验证、加解密等操作,符合要求转发给后端服务处理。不符合要求,返回错误。后端服务只需关注业务相关的改动即可。@engage/bff 包详细信息见 detail,下面举例说明一个基础 BFF 的搭建过程。

# 示例

  1. 安装 @engage/bff , yarn add @engage/bff --registry=http://registry.npm.gridsum.com
  2. 使用

import bff from '@engage/bff';

const server = bff.createBffServer({

  server: {

    port: 8080, // 应用开放端口

    apiPrefix: '/media/api', // 对外接口统一前缀

    platformHost: 'https://alpha-engage.gridsumdissector.com',

  },

  clientConfig: { // 应用配置相关

    appId: '',

    clientId: '',

    clientSecret: '',

    clientSign: '',

  },

  redisOption: { // 应用 redis 配置,主要用来缓存用户信息,获取 api 权限

    password: '123456',

    standalone: { host: '10.201.82.90', port: 6356 },

    mode: 'standalone',

  },

  internalOpenApiProxy: {

    whiteList: ['10.200.50.100', '127.0.0.0/8'], // 支持的后端服务白名单 IP 或 IP 段

  },

  apiAuth: { // 应用内支持的 api 列表,前缀匹配

    public: ['/baidu/add', '/baidu/update'],

    internal: ['/baidu/delete'],

  },

  proxyRules: [ // api 和 openApi 转发规则,如果有自定义的 api 和 openApi,也需要在这里配置转发规则
    {
      api: '/baidu',
      prefix: '/gs/media',
      target: 'http://10.200.50.178:6543',
    },
    {
      api: '/open-api/v1/profile/bind',
      prefix: '/gs/media',
      target: 'http://10.200.50.178:6543',
    },
  ],
});
server.start();