写API接口返回状态码的问题

一般对于接口返回状态码表示不同的结果,比如登陆,有些人会写很多个状态码,如:101,102,103,而有些人只写一个,如:status为0或者1,具体例子:
只用status一个状态码:

// 只要登陆成功,status为1,否则都为0,具体信息放在msg里面
// 成功
{
    status: 1,
    msg: '登陆成功'
}
// 用户名不存在
{
    status: 0,
    msg: '用户名不存在'
}
// 密码错误
{
    status: 0,
    msg: '密码错误'
}

用多个状态码的情况可能如下:

// 成功
{
    code: 200,
    msg: '登陆成功'
}
// 用户名不存在
{
    code: 201,
    msg: '用户名不存在'
}
// 密码错误
{
    code: 202,
    msg: '密码错误'
}

显然第二种会更麻烦,虽然更具体。大家一般都会第二种的吧,第一种的话,会有什么不合适的地方的呢?想看看大家的想法

慕盖茨4494581
浏览 7606回答 11
11回答

饮歌长啸

第二种。第一种只有0和1的话,太单一。遇上需要特殊处理的case就很麻烦。比如说如果需求是'用户名不存在'要自动跳转到注册页面,而'密码错误'只是提示就好,这时候第一种就会显得不够了

当年话下

对于前段来说第一种比较方便

30秒到达战场

我是 成功返回0 提示类的 错误返回1 需特殊处理的case返回其他数字

呼如林

第一种。虽然第二种更具体,但是实际上并不一定有啥用,对于用户来说,密码不正确或者用户名不存在反正都是错误,前台要那code并没啥用。不过如果不是前后端分离情况的话,光code和msg是不够用的,最好加一个url字段,用于前台是否需要跳转。

不负相思意

其实这个还是看团队吧,比如最近写的一个Api,我前期定义错误返回码: $map = [ -1001 => '用户名不存在', -1002 => '密码错误', -1003 => '验证码错误' ]; 采用定义一个这样map错误码,1 001,1代表模块,001代表错误码。只是前台那里只要你不是返回200(约定成功返回200),其他一律都认定错误返回码。其实通过200(成功),-200(不成功)这种简单的也可以,因为你请求出现的异常错误,肯定是在同一个模块下的报错,所以排查起来也不是很麻烦。 一些特殊的状态码,肯定是要约定好的。如token过期需要重新登陆 -100 => '请重新登陆' 这样。

慕神8447489

响应体组成 字段 含义 code 服务端处理业务后的返回代码,其中包含公共响应代码和当前业务特有代码组成右 http_code+3位数字,成功除外,成功使用200表示,其他的,如客户端请求权限错误 401001 msg 服务端处理后返回给客户端的提示性文字,当然,客户端不应该直接使用此提示,而是根据code自定义提示语给用户 data 处理业务逻辑后需要返回的数据,必须为一个对象,而非任何标量值。 session 这里的session并不是传统http中的session,而是单次会话的标识符,因为在客户端调用API的过程中,难免会遇到数据问题,导致不好调试,所以应该将所有的请求记录放进去日志,然后当客户端出现问题时根据请求的session来定位是哪一个会话,然后使用postman对请求进行重放调试,除了请求日志,还应该保存请求日志 公共响应代码 除了业务响应代码,应该还有一些公共响应代码 code 示例 200 请求成功 401001 用户身份失效 400001 请求参数错误 404001 服务没有数据 ....

繁星淼淼

其实合适的就是好的方案。比如有的项目接口都很简单,不过就是普通的增删改查,没啥复杂逻辑,错误定位简单。前端也不需要告诉用户后端的具体错误内容,就简单提示操作出错、失败就可以了。那么状态码可以很简单,甚至0,1就够了。 大型的项目就需要一开始把各个模块的状态码定义好,方便定位捕捉各种错误类型。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java