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

[API 设计] 大家在设计 API 的时候,获取单条信息是直接返回条目主体还是包在 response.data 里?

  •  
  •   nyse · 2018-10-23 15:16:49 +08:00 · 1480 次点击
    这是一个创建于 2010 天前的主题,其中的信息可能已经有所发展或是发生改变。
    GET api/v1/resource/1
    

    返回示例 1:

    {
        status: "success",
        data: {...item_body...}
    }
    

    返回示例 2:

    {
        ...item_body...
    }
    

    以上两种哪一种比较好?

    第一种比较方便前端判断状态,但由于有 HTTP Status Code 来表示状态,这样做似乎又是多余的。

    说说你们喜欢哪种,以及对接过的其他平台的 API 有哪种比较多。

    13 条回复    2018-10-23 18:34:35 +08:00
    qiayue
        1
    qiayue  
       2018-10-23 15:45:37 +08:00
    虽然很多人通过各种分析说有 HTTP Status Code 就足够了,但是,实际使用中还是第一种更方便
    KyonLi
        2
    KyonLi  
       2018-10-23 15:46:46 +08:00
    knightlhs
        3
    knightlhs  
       2018-10-23 16:10:59 +08:00
    只有 HTTP Status Code 是不够的 因为还需要业务代码
    另外国内各种奇葩网络环境 会在 非 200 有各种诡异的情况 投毒 注入等 需要考虑异常情况(不考虑 ssl )
    whypool
        4
    whypool  
       2018-10-23 16:13:21 +08:00
    {
    code:123,
    message:'ok',
    data:...
    }
    LINAICAI
        5
    LINAICAI  
       2018-10-23 16:18:34 +08:00
    写成 2 的话,客户端会打你喔
    gy911201
        6
    gy911201  
       2018-10-23 16:23:42 +08:00
    我用 2,如果出了问题
    http code 就不为 200,
    再显示一个结构是
    {
    "code": 1,
    "message":""
    }
    的响应出来,这样终端那边很多情况只需要注册一个全局的异常处理就可以了(弹提示)
    huaizhouYu
        7
    huaizhouYu  
       2018-10-23 16:23:54 +08:00
    毫无疑问是 1
    limuyan44
        8
    limuyan44  
       2018-10-23 17:45:28 +08:00 via Android
    http 状态码来判断业务本来就是不对的,这个只能代表 http 请求响应状态又不能代表业务处理状态。不然密码输错给前端反个 500 试试,不砍死你。都是 rest 害得。
    nyse
        9
    nyse  
    OP
       2018-10-23 17:47:11 +08:00
    @limuyan44 #8 密码输错返回 401 啊
    nyse
        10
    nyse  
    OP
       2018-10-23 17:48:44 +08:00
    没想到 V2 这么多人不支持 RESTful,一片都倒向第一种。
    jx99
        11
    jx99  
       2018-10-23 17:48:59 +08:00
    喜欢用 1,上级大佬让用 2
    xiaolanger
        12
    xiaolanger  
       2018-10-23 18:10:14 +08:00
    业务代码要单独的,跟 HTTP 状态码不是一回事
    NicholasYX
        13
    NicholasYX  
       2018-10-23 18:34:35 +08:00 via iPhone
    用一
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3560 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 00:46 · PVG 08:46 · LAX 17:46 · JFK 20:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.