我现在前端调用接口查询图书列表,结果根据前端传的参数,找不到图书,返回的结果写成成功还是失败呢? 说说理由。 方案一: { msg: '查询结果为空', success: true, books: [], }
方案二: { msg: '查询结果为空', success: false, books: [], }

我现在前端调用接口查询图书列表,结果根据前端传的参数,找不到图书,返回的结果写成成功还是失败呢? 说说理由。 方案一: { msg: '查询结果为空', success: true, books: [], }
方案二: { msg: '查询结果为空', success: false, books: [], }
1 quan01994 Mar 11, 2021 restful 用 http 状态码来表示是否成功。 |
2 imdong Mar 11, 2021 参数不符合要求,失败。 参数符合要求,但没有结果,成功。 参数符合要求,但约定接口必须返回数据,失败(少见) |
4 quan01994 Mar 11, 2021 |
5 tabris17 Mar 11, 2021 “查询结果为空” 和 “books: []” 是冗余信息 books: []已经表示结果为空了,何必 msg 重复一遍。而且结果为空并非错误,success 为何要设置成 false ? |
6 lihongming Mar 11, 2021 via iPhone RESTful 是一种指导思想,而不是具体的规定。三楼的做法与我们比较一致,但四楼的文章则存在很大争议,主要是该不该用复数的问题。 所以,不要死抠这种问题,自己内部约定好空列表到底算成功还是失败即可。 |
7 metamask Mar 11, 2021 。。。这两个方案都是脱裤子放屁类型 你查询成功,接口没炸,就返回 200 。 怼个 results,或者愿意叫 items,也好。 前端检测数组是否为空来判断有没查询接过。 |
8 ifuture Mar 11, 2021 老哥,也是做图书项目的呀, |
9 ifuture Mar 11, 2021 正确:{code:0 , data: []} 错误:{code: 大于 0} |
10 wozhizui OP @lihongming 同意,restful 应该被看做一种思想。 本问题就是想了解下这种情况通用的做法是什么,不是探讨 restful 规范。 |
11 Oktfolio Mar 11, 2021 根据唯一标识查详情查不到为 404 或 {success: false},列表没有数据是 {success: true, data: []} |
12 FinnBai Mar 11, 2021 首先,接口请求的响应状态由 HTTP 状态码所定,200 就是请求成功了。 至于响应内容中的 success 字段,由业务需求,或者跟前端协商决定。 最后,json 格式可以直接响应列表,所以从某种角度来说,msg,success 字段和 book object key 都是多余的。 最最后,json 格式最后一个字段不能以 "," 结尾,这俩方案都是错的...... |
13 otakustay Mar 11, 2021 列表为空是成功,单条数据不存在是失败 |
14 namelosw Mar 11, 2021 200 + [] -> 成功 400 + {message: "输入不对"} -> 失败 404 + {message: "找不着“} -> 失败 500 + {message: "找着找着挂了"} -> 失败 |
15 IvanLi127 Mar 11, 2021 前端入参合法的话,你找不到也是合法的话,那就是成功,返回空数组。否则前端错 4xx,后端错 5xx 。 前提是调用的是是图书资源。 如果是调用例如作者的图书,找不到作者导致找不到书的,得 404 。最后,还是好好用状态码,返回的内容也最好不要嵌套没用的层。。。好难看呢(逃 |
16 ieiayaobb Mar 11, 2021 query 和 get 是两种语义,query 可以返回列表是空,而 get 代表你是明确知道某个 id 去获取,如果找不到就是 404 |