为什么不用http状态码做api接口状态码

672 阅读2分钟

前段时间公司的技术在争论既然都有了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":{}
    }