转自:飞雪无情
作者:极日光速
世上本没有BFF,随着移动互联网的发展,技术架构垂直体系分层的深入以及敏捷开发场景的广泛应用,BFF的概念应运而生......
首先白话下BFF的概念, 什么是BFF?
见名知意,BFF即Backend for Frontend,是前端的后台,为APP,Web提供标准的API服务接口。它将后端的基础服务接口进行 聚合、裁剪、透传 ,基于前端要求进行适配,它在前端与后端基础服务之间起到沟通桥梁的作用,BFF在整个系统中所处的位置见下方系统架构图:
由此可见,我们可以在后端基础服务不更改或很少更改的基础上快速提供出符合前端需求的API,无论是移动前端,还是传统Web前端,都可以根据各端的特性及迭代频次快速发布。
但随着业务需求的不断增长,BFF层的接口也不断增多,接口需要不断升级与优化,需要科学管理,因此BFF接口设计规范应运而生。
好了,闲话不多说,直接看图:
一、基本规范
1.公共参数:
是指基于前端通用属性的公共参数,每次API请求时均需要带上公参,便于BFF接口逻辑处理。例如:App版本号,操作系统版本号,前端一级渠道,前端二级渠道,设备号等;
2.path命名规范:
-
path路径格式:
https://域名/api/服务名/一级目录/二级目录/方法名
-
method方法:
建议采用GET和POST两种方式调用API
可能有人会问,为什么不用put和delete?大家可以先思考,后续我再补充
-
注意:
get请求参数放到url中传递,post请求参数放在请求body体传递给BFF
3.字段命名规范:
-
驼峰命名法,不建议采用下划线(js除外)
-
常量字段全部大写,单词之间用下划线隔开
-
言简意赅,见名知意,尽量不使用缩写(例如:userName,而非uName)
4.响应数据规范:
一般各厂商API的响应数据包含结果码:“code”,返回信息:“message”,返回数据实体:“data”这三项,本人在原有基础上将message扩展为“displayMessage”,便于定制前端展示提示信息, 以及“errorMessage”,便于接口请求错误信息的排查
注意: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.其他建议:
-
优先使用String作为字段类型,优点是容错性强,能够规避脏数据
-
布尔类型字段使用特定字符表示,例如:Y/N, 1/0,因为Boolean是类,要考虑null判断
-
时间字段如果仅用来显示,建议使用string来展示,不建议前端做date/timestamp这些类型的转换
-
避免浮点型数据计算,建议降低数字单位,提高精度,例如:1(元)传输给数据库时为100(分),金融领域会传1000(厘)
二、安全性
1数据安全性:
-
响应数据中,用户的隐私字段要脱敏处理,例如:手机号中间4位加*号处理,身份证号除前4位和后4位显示外,中间位数加*号处理等
-
关键请求参数中的敏感信息要加密处理,例如用户登录的密码,用户支付密码等
-
反爬监控与反爬策略
2.服务安全性:
-
使用签名校验,防止参数篡改,一般使用MD5摘要加密算法进行校验
-
web仿冒(钓鱼)
-
风控黑白名单策略(基于IP、手机号、设备指纹等维度)
-
限流降级策略(防止后台服务崩溃)
-
常规安全加固(防 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透传调用后端接口
写在最后
没有最完美的规范,只有随着产品形态演进迭代而不断完善的规范,每一个完结项目的总结都是下一个新项目的起点,就如莎士比亚所说“ 凡是过去,皆为序章 ”,保持空杯心态,迎接新的挑战......
架构摆渡人,助你通往架构师方向的领路人。 本号会定期分享架构相关的文章,专注于架构方向,关注我们,下一个架构师就是你。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 十年老树发新芽-前后端分离实践
- 一个年老代程序员午后谈谈架构和架构师
- 还原百年前的世界,AI 大牛将 1895 年老电影转换为 4K 高清!
- 接口测试及常用接口测试工具
- Java中的Comparable接口和Comparator接口
- Java 的 Closeable 接口和 Cloneable 接口
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Cypherpunks
Julian Assange、Jacob Appelbaum、Andy Müller-Maguhn、Jérémie Zimmermann / OR Books / 2012-11 / GBP 8.99
Cypherpunks are activists who advocate the widespread use of strong cryptography (writing in code) as a route to progressive change. Julian Assange, the editor-in-chief of and visionary behind WikiLea......一起来看看 《Cypherpunks》 这本书的介绍吧!