BFF 接口设计规范:一个互联网 10 年老兵的思考

注意:data要采用标准的json格式,数据列表类对象建议带list或array后缀,便于前端识别解析, 例如:

{

    "code": "200",

    "displayMessage": "",

    "errorMessage": "",

    "data": [{

        "categoryType": "POI_OPTION",

        "multiSelect": 1,

        "name": "附近",

        "poiOptionList": [{

                    "name": "1公里",

                    "cityId": 2,

                    "cityName": "上海"

                },

                {

                    "name": "2公里",

                    "cityId": 2,

                    "cityName": "上海"

                }

            ]

        }

    ]

}

5.其他建议:

  1. 优先使用String作为字段类型,优点是容错性强,能够规避脏数据
  2. 布尔类型字段使用特定字符表示,例如:Y/N, 1/0,因为Boolean是类,要考虑null判断
  3. 时间字段如果仅用来显示,建议使用string来展示,不建议前端做date/timestamp这些类型的转换
  4. 避免浮点型数据计算,建议降低数字单位,提高精度,例如:1(元)传输给数据库时为100(分),金融领域会传1000(厘)

二、安全性

1数据安全性:

  1. 响应数据中,用户的隐私字段要脱敏处理,例如:手机号中间4位加*号处理,身份证号除前4位和后4位显示外,中间位数加*号处理等
  2. 关键请求参数中的敏感信息要加密处理,例如用户登录的密码,用户支付密码等
  3. 反爬监控与反爬策略

2.服务安全性:

  1. 使用签名校验,防止参数篡改,一般使用MD5摘要加密算法进行校验
  2. web仿冒(钓鱼)
  3. 风控黑白名单策略(基于IP、手机号、设备指纹等维度)
  4. 限流降级策略(防止后台服务崩溃)
  5. 常规安全加固(防SQL注入、XSS、CSRF等)

三、性能优化

1.接口合并:
多个接口可合并成一个接口,前端一次请求就可以拿到单个页面上的全部展示信息,避免多次请求引起的不必要网络耗时
2.字段精简:
随着需求的迭代,接口的字段也在不断增多,必然导致接口中堆积很多不用的老字段、老逻辑,需要定期精简废弃
3.接口缓存:
大促等活动接口在活动开启之前需要进行缓存预热,提前准备好接口使用的缓存数据,确保活动开启后用户的性能体验不受影响
4.图片压缩:
产品图片的原始尺寸和大小都较大,前端需要根据不同的场景,显示不同尺寸大小的图片(例如:缩略图、列表展示图、icon等),以此减少客户端的网络开销,节省用户流量,提升性能体验
5.网络区分:
例如:在wifi、移动4g及以上网络下调用全量接口,在3g及以下网络调用降级接口
6.限流降级:
例如:淘宝双11期间,“我的订单”栏位做了降级处理,待付款、待发货、待收货不展示数量红点,缓解了服务压力,保障了用户性能体验
四、兼容扩展
1.展示文案和提示信息动态配置
通过后端配置平台动态配置前端展示文案和提示信息,可以随时调整线上,不用发布
2.接口入参采用对象传参,支持可扩展
3.接口返回字段原则上不做删减、修改,只做新增
4.新接口做新老版本兼容,老接口逐步废弃
5.返回参数多采用string类型,保证前端多平台兼容

五、客户端约定

1.客户端只负责UI逻辑展示和用户行为交互,尽量不处理业务逻辑
2.客户端不处理数字金额的计算,由后端计算并经过BFF聚合后返回给前端
3.客户端较少处理请求参数的校验逻辑,应由服务端下发校验规则给前端校验

六、后端约定

1.跟前端UI展示相关的功能,由BFF负责数据聚合、裁剪和透传
2.后端服务处理非前端UI展示的功能,BFF透传调用后端接口
3.后端定义底层业务数据的枚举,BFF可根据实际需要直接使用或根据前端特性转译定制
4.后端处理JOB、文件下载等辅助功能,BFF透传调用后端接口