前段时间公司的技术在争论既然都有了http状态码了,API接口上为什么还要自定义状态码?前端判断了http状态码之后还要再判断自定义的code码,不是多此一举吗?
对于这个问题我做了一些测试:
以http500错的的形式返回如下内容:
{
"code":500,
"msg":"BBBBBBBB"
}
结果无论是jQuery还是Vue的axios都无法获取msg中的BBBBBBBB内容。这一结果就导致了发生异常之后,无法告知前端具体是什么错误。
以大于http1000状态码的请示返回内容:
使用大于http大于1000状态码之后,会发现,如果用浏览器导航栏访问接口是能接收到请求的,但是vue的代理方式请求是无法识别的。也就是说浏览器支持,但是nginx、apache等代理服务可能不支持,这也就导致当我们要定义很多状态码时,http可自定义的状态码就明显不够用了。
由此可以看出http状态码主要还是用于判断网页的不同状态的,并不适用于API接口,API接口的状态最好还是自定义接口。
如何正确的使用API自定义状态码?
以下是我在开发时,不同状态下使用的返回格式:
正常返回收据
//http状态码:200
{
"code":200,
"msg":"ok",
"data":{}
}
接口不存在
//http状态码:404
{
"code":404,
"msg":"访问错误",
"data":{}
}
系统未知的错误
//http状态码:500
{
"code":500,
"msg":"系统错误",
"data":{}
}
自定义的异常
//http状态码:200
//code码1000以后依次往后排
{
"code":1000,
"msg":"账号或密码错误",
"data":{}
}