如果一个正在运行的产品要接入 engage ,engage 平台对后端代码有一定的改造要求。比如,接入 engage 平台时需要做 api 权限校验、openApi 请求加解密、必须提供应用绑定 openApi 等,也就是说已有服务接入 engage 平台必须要做代码改动。为了降低后端应用接入 engage 平台的改造代价,现提供一种快速接入方案。
# 方案
搭建中间层 BFF 服务,该服务主要提供对 api 请求登录信息集成、权限验证,对 openApi 请求验证签名、加解密数据等能力,这些能力都被集成在 @engage/bff 包内,开发人员引用即可。BFF 服务搭建完成后,用户不再直接请求后端服务,而是请求BFF服务,BFF服务会对请求做权限验证、加解密等操作,符合要求转发给后端服务处理。不符合要求,返回错误。后端服务只需关注业务相关的改动即可。@engage/bff 包详细信息见 detail,下面举例说明一个基础 BFF 的搭建过程。
# 示例
- 安装 @engage/bff ,
yarn add @engage/bff --registry=http://registry.npm.gridsum.com
- 使用
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();