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

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

  •  
  •   imdong · 112 天前 · 1090 次点击
    这是一个创建于 112 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司之前的项目(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
        1
    airyland   112 天前
    0 为成功,不同模块指定一个不同的开头数字,4 位数。1 开头的是全局错误,比如 1001 未登录,1002 无权限等。其他模块比如 3001,3002 以此递增。
        2
    EastLord   112 天前
    我想用 HTTP code 同事不让
        3
    guojxx   112 天前
    code 自定义即可,返回的模板固定,内容填充
    目前定义是这样
    {"code":"100101","message":"success","data":{},"count":""}
        4
    WuwuGin   112 天前
    我就想问真有人用 http code 当后端返回码的吗?
        5
    ixwen   112 天前
    同 php,我是直接定义公用方法去返回数据的
        6
    aaronly   112 天前
    @WuwuGin 我用
        7
    ebingtel   112 天前
    @EastLord
    @WuwuGin 感觉不合适,因为 response code 每次响应都会有,没必要再次放进接口中了
        8
    EastLord   112 天前
    @ebingtel 那不放到接口中呢
        9
    CFO   112 天前 via Android
    现在 data succ options 就这三个 试过加上 code 然后 code 太多 前端疯了 后端也不知道该用那个
        10
    CFO   112 天前 via Android
    @CFO 忘了还有个 msg 字段
        11
    CallMeSoul   53 天前
        12
    CallMeSoul   53 天前
    @aaronly 我也用
        13
    CallMeSoul   53 天前
    @CFO 用 httpcode 足以
        14
    CallMeSoul   53 天前
    @ebingtel 意思是直接用 httpcode 不用自定义,不是吧 httpcode 当做自定义
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2339 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 21ms · UTC 15:30 · PVG 23:30 · LAX 08:30 · JFK 11:30
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1