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

RESTful API 的错误返回有什么最佳实践么?

  •  
  •   9 · 2016-03-22 16:05:51 +08:00 · 4681 次点击
    这是一个创建于 3175 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用 http status code 来表示错误类型这个是没问题的,主要是纠结于这个之外的错误信息怎么处理展示,求指导

    14 条回复    2016-03-22 20:46:23 +08:00
    v1024
        1
    v1024  
       2016-03-22 16:12:49 +08:00
    code + message , code 用于程序判断, message 用于显示输出。 code 是 int , message 是任意内容的 string 。
    learnshare
        2
    learnshare  
       2016-03-22 16:32:32 +08:00
    遵循 HTTP code 就是比较好的实践方式。
    tidezyc
        3
    tidezyc  
       2016-03-22 16:41:44 +08:00 via iPhone   ❤️ 1
    http status code 应该保持都是 200 不变,消息里加上 code
    9
        4
    9  
    OP
       2016-03-22 17:22:47 +08:00
    @v1024 如果错误比较复杂, message 怕 hole 不住,或许 docker 的这种比较好?

    {
    "errors:" [
    {
    "code": <error code>,
    "message": "<error message>",
    "detail": ...
    },
    ...
    ]
    }
    9
        5
    9  
    OP
       2016-03-22 17:24:52 +08:00
    @learnshare http status code 这个没什么异议,我纠结的是错误信息的展示
    9
        6
    9  
    OP
       2016-03-22 17:25:17 +08:00
    @v1024 笔误, hole -> hold
    9
        7
    9  
    OP
       2016-03-22 17:25:39 +08:00
    @tidezyc 错误消息呢?
    learnshare
        8
    learnshare  
       2016-03-22 18:00:51 +08:00
    @9 错误信息建议是可读懂的内容,在国内就直接输出中文好了。因为这部分是给 API 使用者或者用户看的,越清晰易懂越好。
    hbkdsm
        9
    hbkdsm  
       2016-03-22 18:12:24 +08:00 via Android   ❤️ 1
    可以参考 JSON API 规范
    cxbig
        10
    cxbig  
       2016-03-22 18:19:45 +08:00
    基本网络错误用对应的 response code
    app 相关操作错误用 200 返回,基本 field 可以包括
    - exception // 错误类
    - code //自编错误代码
    - message // 用户可见错误信息
    9
        11
    9  
    OP
       2016-03-22 19:27:47 +08:00
    @hbkdsm 非常感谢,相当好的参考,可惜没有评论置顶功能

    发现上面提到的 docker registry 的返回结构已经跟这个规范非常接近
    9
        12
    9  
    OP
       2016-03-22 19:30:06 +08:00
    @learnshare 你说的我明白,我想知道的是错误的具体的展示规范,不过也很感谢你的回答!
    jade88
        14
    jade88  
       2016-03-22 20:46:23 +08:00
    为什么错误不用 4xx 返回呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2474 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:46 · PVG 23:46 · LAX 07:46 · JFK 10:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.