你们后端是如何定义并管理接口返回状态码的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imdong
V2EX    问与答

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

  imdong 2018-11-26 16:18:32 +08:00 9167 次点击
这是一个创建于 2588 天前的主题,其中的信息可能已经有所发展或是发生改变。
公司之前的项目(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 开发,不同语言可能做法不太一样。

不知道大佬们都是怎么做的?还是真的都很随意写?
14 条回复    2019-01-24 14:42:35 +08:00
airyland
    1
airyland  
   2018-11-26 16:40:54 +08:00
0 为成功,不同模块指定一个不同的开头数字,4 位数。1 开头的是全局错误,比如 1001 未登录,1002 无权限等。其他模块比如 3001,3002 以此递增。
EastLord
    2
EastLord  
   2018-11-26 16:44:41 +08:00
我想用 HTTP code 同事不让
guojxx
    3
guojxx  
   2018-11-26 16:49:15 +08:00
code 自定义即可,返回的模板固定,内容填充
目前定义是这样
{"code":"100101","message":"success","data":{},"count":""}
WuwuGin
    4
WuwuGin  
   2018-11-26 16:50:43 +08:00
我就想问真有人用 http code 当后端返回码的吗?
ixwen
    5
ixwen  
   2018-11-26 16:58:27 +08:00
同 php,我是直接定义公用方法去返回数据的
aaronly
    6
aaronly  
   2018-11-26 17:01:26 +08:00
/div>
@WuwuGin 我用
ebingtel
    7
ebingtel  
   2018-11-26 17:01:45 +08:00
@EastLord
@WuwuGin 感觉不合适,因为 response code 每次响应都会有,没必要再次放进接口中了
EastLord
    8
EastLord  
   2018-11-26 18:35:39 +08:00
@ebingtel 那不放到接口中呢
CFO
    9
CFO  
   2018-11-26 18:42:22 +08:00 via Android
现在 data succ options 就这三个 试过加上 code 然后 code 太多 前端疯了 后端也不知道该用那个
CFO
    10
CFO  
   2018-11-26 18:43:15 +08:00 via Android
@CFO 忘了还有个 msg 字段
CallMeSoul
    11
CallMeSoul  
   2019-01-24 14:38:30 +08:00
CallMeSoul
    12
CallMeSoul  
   2019-01-24 14:39:06 +08:00
@aaronly 我也用
CallMeSoul
    13
CallMeSoul  
   2019-01-24 14:41:36 +08:00
@CFO 用 httpcode 足以
CallMeSoul
    14
CallMeSoul  
   2019-01-24 14:42:35 +08:00
@ebingtel 意思是直接用 httpcode 不用自定义,不是吧 httpcode 当做自定义
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2697 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 23ms UTC 13:28 PVG 21:28 LAX 05:28 JFK 08:28
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86