你们后端是如何定义并管理接口返回状态码的?

2018-11-26 16:18:32 +08:00
 imdong
公司之前的项目(PHP)接口是这样定义的
{"code":100,"message":"请求成功",...}
code 基本上就是 100 成功 非 100 失败 一般全都是 101
至于 data list count 成员都是随接口定义的。

最近新搞了个项目,准备规范一下这些,想全局统一管理状态码与提示文本。

目前的思路是定义个 ReturnData 的类,所有的接口都必须返回这个类对象。
这样就可以规范接口格式了,至于 data 里面是啥就随意了。

然后所有的状态码都定义到这个类的常量,然后对应的提示写到配置文件。

状态码格式:

* 1. 3 位 全局码 定义参考 HTTP Status Code
* 2. 5 位 局部码 定义规则:ABBCC 自动补零
* 1) A 消息级别码 1 位, 1=控制性操作(如登录成功 /添加成功 需要跳转) 2=提示性消息(发送成功,无后续操作) 3=隐藏性提示(操作成功)
* 2) BB 模块标识码 2 位, 00 禁止使用 具体看 module 定义
* 3) CC 消息状态码 2 位, 00 禁止使用 10 以下预留


大致用法就是这样的

return new ReturnData($code = ReturnData::ACCOUNT_NO_LOGIN[, $data = ['url' => '/login'][, $message = '尚未登录']]);
{"code":10110,"message":"尚未登录","data":{"url":"/login"}}
====
return new ReturnData($data = ['count' => 100, 'list' => [...]]);
{"code":200,"message":"请求成功","data":{"count":100,"list":[...]}}

但是感觉所有的状态都要去类里面定义一下,声明头会不会太长, 后期没法看了?

说一下前提,我们是 PHP 开发,不同语言可能做法不太一样。

不知道大佬们都是怎么做的?还是真的都很随意写?
8700 次点击
所在节点    问与答
14 条回复
airyland
2018-11-26 16:40:54 +08:00
0 为成功,不同模块指定一个不同的开头数字,4 位数。1 开头的是全局错误,比如 1001 未登录,1002 无权限等。其他模块比如 3001,3002 以此递增。
EastLord
2018-11-26 16:44:41 +08:00
我想用 HTTP code 同事不让
guojxx
2018-11-26 16:49:15 +08:00
code 自定义即可,返回的模板固定,内容填充
目前定义是这样
{"code":"100101","message":"success","data":{},"count":""}
WuwuGin
2018-11-26 16:50:43 +08:00
我就想问真有人用 http code 当后端返回码的吗?
ixwen
2018-11-26 16:58:27 +08:00
同 php,我是直接定义公用方法去返回数据的
aaronly
2018-11-26 17:01:26 +08:00
@WuwuGin 我用
ebingtel
2018-11-26 17:01:45 +08:00
@EastLord
@WuwuGin 感觉不合适,因为 response code 每次响应都会有,没必要再次放进接口中了
EastLord
2018-11-26 18:35:39 +08:00
@ebingtel 那不放到接口中呢
CFO
2018-11-26 18:42:22 +08:00
现在 data succ options 就这三个 试过加上 code 然后 code 太多 前端疯了 后端也不知道该用那个
CFO
2018-11-26 18:43:15 +08:00
@CFO 忘了还有个 msg 字段
CallMeSoul
2019-01-24 14:38:30 +08:00
CallMeSoul
2019-01-24 14:39:06 +08:00
@aaronly 我也用
CallMeSoul
2019-01-24 14:41:36 +08:00
@CFO 用 httpcode 足以
CallMeSoul
2019-01-24 14:42:35 +08:00
@ebingtel 意思是直接用 httpcode 不用自定义,不是吧 httpcode 当做自定义

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/511641

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX