V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
imdong
V2EX  ›  问与答

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

  •  
  •   imdong · 2018-11-26 16:18:32 +08:00 · 8828 次点击
    这是一个创建于 2225 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司之前的项目(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
    @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   ·   实用小工具   ·   2731 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 08:36 · PVG 16:36 · LAX 00:36 · JFK 03:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.