为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕盖茨4494581 2019-01-17 09:42:46
一般对于接口返回状态码表示不同的结果,比如登陆,有些人会写很多个状态码,如: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: '密码错误' } 显然第二种会更麻烦,虽然更具体。大家一般都会第二种的吧,第一种的话,会有什么不合适的地方的呢?想看看大家的想法
查看完整描述

11 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

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

查看完整回答
反对 回复 2019-02-12
?
当年话下

TA贡献1890条经验 获得超9个赞

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

查看完整回答
反对 回复 2019-02-12
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

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

查看完整回答
反对 回复 2019-02-12
?
呼如林

TA贡献1798条经验 获得超3个赞

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

查看完整回答
反对 回复 2019-02-12
?
不负相思意

TA贡献1777条经验 获得超10个赞

其实这个还是看团队吧,比如最近写的一个Api,我前期定义错误返回码:

$map = [
    -1001 => '用户名不存在',
    -1002 => '密码错误',
    -1003 => '验证码错误'
];

采用定义一个这样map错误码,1 001,1代表模块,001代表错误码。只是前台那里只要你不是返回200(约定成功返回200),其他一律都认定错误返回码。其实通过200(成功),-200(不成功)这种简单的也可以,因为你请求出现的异常错误,肯定是在同一个模块下的报错,所以排查起来也不是很麻烦。

一些特殊的状态码,肯定是要约定好的。如token过期需要重新登陆

-100 => '请重新登陆'

这样。

查看完整回答
反对 回复 2019-02-12
?
慕神8447489

TA贡献1780条经验 获得超1个赞

响应体组成

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

公共响应代码

除了业务响应代码,应该还有一些公共响应代码

code 示例
200 请求成功
401001 用户身份失效
400001 请求参数错误
404001 服务没有数据

....

查看完整回答
反对 回复 2019-02-12
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

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

查看完整回答
反对 回复 2019-02-12
  • 11 回答
  • 0 关注
  • 7597 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信