API 状态返回 code 1 好还是直接用 http status? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Phishion
V2EX    程序员

API 状态返回 code 1 好还是直接用 http status?

  •  1
     
  •   Phishion 2018-08-02 10:29:19 +08:00 6486 次点击
    这是一个创建于 2656 天前的主题,其中的信息可能已经有所发展或是发生改变。
    感觉用 code 1 什么的有点鸡肋,还不如直接用 http 状态 2xx 就是成功
    25 条回复    2018-08-03 08:00:19 +08:00
    michaelcheng
        1
    michaelcheng  
       2018-08-02 10:32:40 +08:00
    说不准,公司业务里是没有直接用 http status, 自己定义了自己的响应规范
    casztg
        2
    casztg  
       2018-08-02 10:40:43 +08:00
    看公司的习惯来把,HTTP 协议是套规范,一切以实际为准。
    killerv
        3
    killerv  
       2018-08-02 10:41:30 +08:00
    如果业务比较复杂,http code 可能不够用
    TommyLemon
        4
    TommyLemon  
       2018-08-02 10:42:01 +08:00
    HTTP 协议里定义了 status 和 message,
    但是都是在 Response Header 里返回的,设置和查看都不方便,
    所以一般就和数据一起封装到 Response body 里了
    owenliang
        5
    owenliang  
       2018-08-02 10:46:05 +08:00   1
    依靠 HTTP 状态码表达的方式,属于 REST API 范围。

    一般 open api 采用 REST,公司内 RPC 与公司内 client 与 server 一般不完全遵守 REST,也就是统一 200 表示正常,并用 payload 里的 errno 之类的表达错误。
    sorshion
        6
    sorshion  
       2018-08-02 11:20:26 +08:00
    标准 restful 推荐用 http 状态码,自己定义的,统一就好
    ChristopherWu
        7
    ChristopherWu  
       2018-08-02 11:28:28 +08:00   2
    http code 2xx, 5xx,3xx 只是表明了这个 http 请求的状况如何,与你的业务没有挂钩。

    http 请求可以成功,不代表业务成功了,所以你的业务需要制定另外的一套状态码,来与前端沟通此业务操作的状况。(不是儿戏的项目都需要,对吧?)
    ChristopherWu
        8
    ChristopherWu  
       2018-08-02 11:29:27 +08:00
    另外如果你的业务状态码与 http 状态码 重合,也不是 best practice.
    很容易在沟通上出现误会。
    huiyue
        9
    huiyue  
       2018-08-02 11:34:06 +08:00
    API 返回结果如果涉及业务,不建议用 http status 来。
    duxinglangzi
        10
    duxinglangzi  
       2018-08-02 11:56:27 +08:00
    我认为单纯的讲 API 返回的 code 字段值,还是自定义的比较好。http status 是表示网络访问状态。我觉得和业务上的 code 码最好不要 混在一起,不好分辨。 另外可以参考一下 腾讯微信公众号文档设计规则。
    HuHui
        11
    HuHui  
       2018-08-02 12:12:42 +08:00
    返回一个 404 呢?
    justseemore
        12
    justseemore  
       2018-08-02 12:14:15 +08:00
    业务模块 id+http 响应码 100200 这种- -,
    sampeng
        13
    sampeng  
       2018-08-02 12:21:24 +08:00
    我更倾向有明确符合 http 协议的。用 http 头里的 status。再结合 body 力的 status 表示更多的含义。。。
    比如 401.这个错误。再结合 body 里的 status。就能明确是客户端错误。
    有些客户端只用处理 4XX 的就行了。其他的 5XX 的直接返回错误信息就好了。不用做太多处理。
    如果是只有 body 的 status。所有的都得判断。。对客户端挺不友好的。

    关键是从语义上更清晰一点。
    MeteorCat
        14
    MeteorCat  
       2018-08-02 12:23:35 +08:00 via Android
    按需求来选择 rest,最怕 nginx 排查的时候一堆奇怪的响应码
    swcat
        15
    swcat  
       2018-08-02 12:33:30 +08:00 via iPhone
    http code 表示网络状态,接口是业务层的,最好不要混用,
    有可能 http code 不够用
    而且想过运营商劫持非成功响应吗,


    当然具体情况具体分析,如果是内部用,都不存在的,这种东西约定好就行
    yujieyu7
        16
    yujieyu7  
       2018-08-02 12:33:37 +08:00
    从逻辑上来讲,http 状态码是来标识 http 请求状态的,就不要把业务状态强加进去了,这完全是两个领域的事情。

    另外,复杂业务下,那状态码根本不够用呐。

    事实上绝大部分公司还是用自己定义的业务码来返回的 api 调用情况的。阿里 api,百度 api 等等,无一例外
    leafiy
        17
    leafiy  
       2018-08-02 12:54:53 +08:00
    逻辑上讲怎么都对,实际情况是 3 楼,比如 409 就不够用的。。。。
    xcstream
        18
    xcstream  
       2018-08-02 12:56:49 +08:00
    code 200 表示正常
    jianpanxia
        19
    jianpanxia  
       2018-08-02 13:32:59 +08:00
    一起用.
    whileFalse
        20
    whileFalse  
       2018-08-02 13:37:43 +08:00
    作为运维提一句,我们在负载均衡器层做了 http status code 的统计。4xx 5xx 我们会统计出来给到开发检查业务问题。
    如果开发用 4xx 表达正常业务信息……嗯那是他们自己的事儿我们也管不着。
    YMB
        21
    YMB  
       2018-08-02 13:39:13 +08:00
    这么说吧,现在的 APP,支付宝和掌上英雄联盟用的是自定义的 code
    kmahyyg
        22
    strong>kmahyyg  
       2018-08-02 14:23:03 +08:00 via iPad
    15 楼正解, 你要考虑运营商劫持问题. 所以, http 200 返回 status != 0 才行.
    lygmqkl
        23
    lygmqkl  
       2018-08-02 15:34:17 +08:00
    200/400/401/403/404, 然后针对 01 03 04 在扩展下属错误码吧。。。
    yemoluo
        24
    yemoluo  
       2018-08-02 20:46:27 +08:00
    推荐使用两者的结合

    1. HTTP 响应状态码的含义是 HTTP 的状态,准确的说是远程资源打交道时的状态信息,不能反映程序的内部状态
    2. 如果只使用自定义的,则客户端应该将 200 以外的状态码都视为错误才可

    一般情况下,就看你自己的意思,如果对整个技术的掌控力度比较强,完全可以只用 HTTP 状态码

    但是,但是,我偏偏选择了最小资源集合,就是只接收 200 状态码和只支持 POST 请求,只为减少团队成员犯错的可能性
    lrh3321
        25
    lrh3321  
       2018-08-03 08:00:19 +08:00 via Android
    不推荐用 http status。
    之前错误码定义了个 5xx,结果 nginx 先傻了,排查了半天。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2637 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 09:46 PVG 17:46 LAX 01:46 JFK 04:46
    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