请教:关于 RESTful API 中状态码的疑惑 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
m31271n
V2EX    程序员

请教:关于 RESTful API 中状态码的疑惑

  •  
  •   m31271n 2017 年 2 月 1 日 3993 次点击
    这是一个创建于 3293 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 如果请求体的格式错误,比如使用了格式错误的 JSON ,这时,应该使用状态码 400

    2. 如果请求体的格式正确,但是其中的某个字段所包含数据由于业务逻辑而不能被使用时,比如不能使用已经存在的用户名,这时的状态码应该使用什么呢?

    400: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).

    403: The server understood the request but refuses to authorize it.

    疑惑点在:这种出于业务逻辑的原因而不能使用某个字段所包含的数据的情况,应该被归类于请求格式错误(400),还是拒绝响应(403)呢?

    第 1 条附言    2017 年 2 月 1 日
    已经得到想要的答案。谢谢大家伙儿。
    7 条回复    2017-02-02 10:13:05 +08:00
    jybox
        1
    jybox  
       2017 年 2 月 1 日   1
    可供参考:

    422 Unprocessable Entity 语义错误,适用大部分客户端错误的情况
    409 Conflict 冲突,适用需要用户解决冲突并重新提交的情况(用户名已被使用)

    其实除了一些非常常见的错误代码,其他的错误代码大家都没有很明确的共识,所以死扣哪个代码更合理意义并不大。
    FrankFang128
        2
    FrankFang128  
       2017 年 2 月 1 日   1
    我理解 400 是一个通用错误,如果你不确定用 4 几几,那就 400 吧
    mornlight
        3
    mornlight  
       2017 年 2 月 1 日   1
    看具体的原因,对于用户名冲突来说可以报 409 。用户名字符不符合规范可以用 400 。
    tonyluj
        4
    tonyluj  
       2017 年 2 月 1 日   1
    对于比较模糊或者模棱两可的请求错误,可以使用广义的 400 来表示这种错误,在 Response 的 `message` 字段中注明详细错误,同时在 API 文档中解释清楚

    对于楼主提到的,可以使用 422 Unprocessable Entity ,一楼已经给出了详细解释
    /table>
    haozhang
        5
    haozhang  
       2017 年 2 月 1 日 via iPhone   1
    你可以把错误简单分为 301 , 400 , 500 然后返回的 json 加个自定义的 error code ,类似: error_code :“ a200 ”, a200 表示某某错误, a201 表示某某错误
    lslqtz
        6
    lslqtz  
       2017 年 2 月 2 日 via iPhone   1
    我喜欢直接抛 403+json 提供错误码
    franklinyu
        7
    franklinyu  
       2017 年 2 月 2 日   1
    於情我人 422
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2056 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 13:30 PVG 21:30 LAX 05:30 JFK 08:30
    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