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