基于前后端分离的数据交互格式思考

646 阅读3分钟

前后端分离是目前生产环境下,WEB服务使用比较频繁的一种前后端技术,很多前端的小伙伴也由于前后端分离技术的兴起导致技术栈偏向于VUE这样前端渲染的技术框架。今天,我们来聊一聊,基于前后端分离的数据交互格式思考。

起始:

前后端分离基本的概念就是把页面渲染的过程彻底交给了前端,后端只负责数据,前端和后端的耦合程度降低,更多的交互来自于axios等请求框架请求后端,后端接到请求之后,将数据返回到前端。那么这个过程当中,返回的结构约定就很重要了,因为随着前端和后端代码耦合度的降低,那么前端和后端开发的沟通成本实际上是增高的,一个好的规范,可以降低很多麻烦。所以我们来聊聊前后端交互过程当中返回数据当中哪些需要关注的细节点。

请求

接口端要对前端请求携带的参数做足够的错误考量和约定,否则接口的健壮性没有办法保证,比如:

http://dazejz.club/api/system/user?age=18

上面的路由是前端用来请求服务的的地址,但实际上是后端期望的地址,由于用户操作、代码特点等原因可能出现下面的情况:

1、age没有携带,这种情况下假如后端服务器没有进行空校验或者设置默认值。

2、对值类型没有预判,尽管在前端传递的时候传入的是数字,但是经过url拼接,框架接收极可能出现数字类型字符串,这个时候尤其用来做比较会出现莫名奇妙的错误。

3、对异常值没有合理的处理,用python Flask举例子,好多小伙伴在接受到前端传递的数值参数的时候,会编写下面的接收代码:

age = int(request.get("age", 18))

但是,如果前端由于代码逻辑传递了unidfined,那么int类型转换unidfined肯定是要出错的,这个时候使用Python字符串判断的方式会好一些:

age = request.get("age")
if age and age.isdigit():
    age_num = int(age)
else:
    age_num = 18

响应

前后端分离响应的数据格式都很类似,但是也有几个细节点需要说明,我们以,上面请求用户信息的地址的响应数据作为例子:

{
    "data": [
        {
            "username": "laobian",
            "age": 18,
            "gender": "男",
        },
        {
            "username": "laobian",
            "age": 18,
            "gender": "男",
        },
        {
            "username": "laobian",
            "age": 18,
            "gender": "男",
        }
    ],
    “errmsg”: "请求成功",
    "code": 1,
}

1、返回的数据结构要完整,哪怕没有值返回空也可以,但是不可以不返回,比如,上面的响应,如果由于没有查询到数据就不反回data,基于后端开发的角度没有问题,但是前端就需要判断是否有data,data是否有值,自然开发效率变低了。

2、对于返回,建议一定要返回”errmsg“和code两个参数,这两个参数其中:

(1)errmsg代表的是错误的描述,当然可以进行包装,主要可以提供给服务的开发者和功能的使用者,他们通过接口返回的错误描述解决bug或者熟悉程序功能的特性。

(2)code返回一个状态码,大家可以仿照http协议的含义返回,但是需要注意的是:前端,监控部分都需要通过返回的状态码来决定下一步的操作。所以code需要有规律,比如所有的错误都是小等于0的状态码。

基于前后端分离需要注意的点还有很多,我们这里先聊这些,欢迎各位大佬多多指教。