接口合并思考

152 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情

前期背景

因业务需求,现需要将服务A接口和第三方的接口整合封装,对外开放仅限授权使用。此方式可以称为代理服务接口,用户无需在意对接服务A内部对接何种接口,仅需关心需要什么数据并通过代理服务接口获取。合并封装最终目的主要实现。将提供对外开放接口统一一个入口,且用户仅可接入访问授权后的接口。技术上通过NodeJs实现。

用途

****将第三方接口合并,并统一提供对外的接口地址。

目标

  • 接口安全,如token安全机制
  • 实现绝对的兼容
  • 可配置授权

接口对比

服务A 提供接口服务A 对接接口
请求HeaderAuthorization 字段生成规则:JWT通过调用接口获取tokenToken 字段生成规则:JWT生成一个token[1]
请求方式GETGET
请求参数支持分页:pageNo=1&pageSize=10过滤条件Filter自定义排序扩展属性Id:支持分页:p=1&s=10search=""
返回结果

将部分接口进行对比,然后抽象出一层新的接口参数,但是需要主要由标识让后端服务识别服务的目标。这样后端服务才能更好的将服务进行转发。

接口认证使用 JWT 认证。由同一接口提供者签发认证凭证给用户,然后用户通过唯一的凭证生成 token 。后续所有的接口都需要携带 token 进行请求否则将不进行访问。

使用凭证是为了后续扩展将接口设计成可以授权的方式,即授权用户可访问的接口。

使用 Node 生成 token的方式:

let secret = Buffer.from(JWT_SECRET_, 'base64');
    let token = jwt.sign({}, secret, { algorithm: 'HS512', jwtid: apiConfig.JWT_ID_YJ });
    let args = {
        headers: {
            'Content-Type': 'application/json',
            'Token': token
        },
        data: datas
    };

认证时序图设计

整体就是由接口系统完成用户请求的认证,然后再将其转发到具体的目标服务。其实真正还是无法抽象所有的接口,最终就是相当于称为一层网关设计一样,完成网关该有的工作。