V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
watanuki
V2EX  ›  程序员

为什么后端开发都喜欢自己定义 responseCode? HTTP 状态码不够用吗?

  •  
  •   watanuki · 2020-05-29 14:10:45 +08:00 · 26392 次点击
    这是一个创建于 1665 天前的主题,其中的信息可能已经有所发展或是发生改变。

    所有请求都返回 200,然后自己定义 responseCode, 好像很多大厂的后端接口都是在这样做的,这样做有什么好处? 现在后端开发是不是已经有了关于 responseCode 的统一标准?还是一个公司一套标准? 如果没有统一标准,大家在开发个人的后端项目时也会用 responseCode 吗?

    216 条回复    2024-01-04 19:45:36 +08:00
    1  2  3  
    xkzhangsan
        201
    xkzhangsan  
       2020-05-31 11:05:43 +08:00
    HTTP 状态码只能表示请求状态,有时候有多种业务相关的原因,要区分表示,自己定义 responseCode 。
    cw2k13as
        202
    cw2k13as  
       2020-05-31 11:07:27 +08:00
    我们公司会加一层,状态码和错误信息,不然你根本不知道是啥错误,response 本身有非 2 开通状态码的时候你读不到 data 里面的错误信息。用户看你这些不具体的错误描述会抓狂的
    deplives
        203
    deplives  
       2020-05-31 12:51:00 +08:00
    HTTP 状态码是不够用啊,你说我给你个 500 但是情况 1 和情况 2 都有可能出 500 你怎么知道是哪种情况
    iX8NEGGn
        204
    iX8NEGGn  
       2020-05-31 14:03:08 +08:00 via iPhone
    这个月经贴,谁能讨论出个结果,我叫他爸爸
    DOLLOR
        205
    DOLLOR  
       2020-06-01 09:37:41 +08:00
    自定义 responseCode 可以少加班,早睡觉。
    因为凡是 4XX 和 5XX 的错误,默认甩锅运维,开发只管吃瓜。
    fueen
        206
    fueen  
       2020-06-01 12:19:06 +08:00
    这。。。。
    yian5487
        207
    yian5487  
       2020-06-01 13:45:32 +08:00
    不够,下一位
    kylix
        208
    kylix  
       2020-06-01 16:24:49 +08:00
    泡杯咖啡,坐下来慢慢看。。。摸个鱼

    .
    .
    .
    不要给我返回 418 吖
    billtsui
        209
    billtsui  
       2020-06-09 10:51:38 +08:00
    你前端用匹配字符串的方式,来做逻辑处理吗?如果这样,当我没说。
    CallMeSoul
        210
    CallMeSoul  
       2020-11-10 11:04:23 +08:00
    我是前端真心觉得自定义 code 真心麻烦,觉得用 http code 好用点。然后去找了下用自定义 code 的原因。
    好像不知 IE 几时代 http 错误会弹出来影响用户,所以就全 200,在自定义。算是历史遗留问题吧。

    然后用自定义 code 的不好:
    CallMeSoul
        211
    CallMeSoul  
       2020-11-10 11:13:28 +08:00
    然后用自定义 code 的不好:
    1 。多一层判断,比如 if(res.code) 和 if(res.data.code) 一两个接口没区别。100 个接口有量变了。
    2 。每个项目组每个公司或者每个后端开发者的自定义 code 都不统一,容易造成歧义。使用 http code 跟着标准走,无歧义
    3. 成功和失败业务逻辑,一般前端都会全局拦截失败逻辑通用的错误,比如 400.然后成功后的逻辑应该再 data 里面对应每个接口去定义。
    dmen
        212
    dmen  
       2021-01-20 10:13:45 +08:00
    @no1xsyzy 看了一堆评论,比较认同你的观点。能不能指点一下“开发一个放给外部开发者使用的 API ”场景的方案呢?
    no1xsyzy
        213
    no1xsyzy  
       2021-01-20 17:32:34 +08:00
    @dmen 实际上楼上不少举一些大厂提供的 Web API 均属于此列,比如 xiangwan 在 #113 楼提出的那个。

    顺便补充一下,其实有疑似复盘系统…… Sentry,就在 Python 节点右侧站长推荐的 “值得关注的项目” 里……
    但是要注册一个账号有点不太想用,所以也没能验证有多符合我的设想……
    dmen
        214
    dmen  
       2021-03-03 10:25:42 +08:00
    @sanggao “喜欢折腾,又肤浅。像极了文科生”,莫名其妙的优越感,这话说得太肤浅了。
    sankemao
        215
    sankemao  
       2021-03-04 10:59:26 +08:00
    说用 http 状态码的都不是做客户端的
    bofei
        216
    bofei  
       350 天前
    @SpencerCJH 您好,请问下你们是 直接设置 http Code 吗 还是自己定义一个消息体,里面放这些呢。如果是设置 httpCode ,那 grpc 服务端怎么返回错误呢,是返回 401 还是 UNAUTHENTICATED 呢,返回 UNAUTHENTICATED grpc 客户端处理不了吧

    200 OK 无错误。
    400 INVALID_ARGUMENT 客户端指定了无效参数。如需了解详情,请查看错误消息和错误详细信息。
    400 FAILED_PRECONDITION 请求无法在当前系统状态下执行,例如删除非空目录。
    401 UNAUTHENTICATED 由于 OAuth 令牌丢失、无效或过期,请求未通过身份验证
    1  2  3  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3337 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 04:49 · PVG 12:49 · LAX 20:49 · JFK 23:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.