restful api 的返回值问题

2021-03-11 14:23:41 +08:00
 wozhizui

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

方案二: { msg: '查询结果为空', success: false, books: [], }

2300 次点击
所在节点    程序员
17 条回复
quan01994
2021-03-11 14:27:53 +08:00
restful 用 http 状态码来表示是否成功。
imdong
2021-03-11 14:28:26 +08:00
参数不符合要求,失败。
参数符合要求,但没有结果,成功。
参数符合要求,但约定接口必须返回数据,失败(少见)
imdong
2021-03-11 14:29:35 +08:00
接 @imdong #2 一般列表为空,也算成功,但是获取指定唯一数据( ID )为空时应该时 404 失败。
quan01994
2021-03-11 14:32:54 +08:00
tabris17
2021-03-11 14:35:41 +08:00
“查询结果为空” 和 “books: []” 是冗余信息

books: []已经表示结果为空了,何必 msg 重复一遍。而且结果为空并非错误,success 为何要设置成 false ?
lihongming
2021-03-11 14:38:57 +08:00
RESTful 是一种指导思想,而不是具体的规定。三楼的做法与我们比较一致,但四楼的文章则存在很大争议,主要是该不该用复数的问题。

所以,不要死抠这种问题,自己内部约定好空列表到底算成功还是失败即可。
freakxx
2021-03-11 14:45:05 +08:00
。。。这两个方案都是脱裤子放屁类型

你查询成功,接口没炸,就返回 200 。
怼个 results,或者愿意叫 items,也好。
前端检测数组是否为空来判断有没查询接过。
ifuture
2021-03-11 14:51:35 +08:00
老哥,也是做图书项目的呀,
ifuture
2021-03-11 14:53:37 +08:00
正确:{code:0 , data: []}
错误:{code: 大于 0}
wozhizui
2021-03-11 14:56:29 +08:00
@lihongming 同意,restful 应该被看做一种思想。
本问题就是想了解下这种情况通用的做法是什么,不是探讨 restful 规范。
Oktfolio
2021-03-11 14:56:59 +08:00
根据唯一标识查详情查不到为 404 或 {success: false},列表没有数据是 {success: true, data: []}
baiyi
2021-03-11 14:59:58 +08:00
首先,接口请求的响应状态由 HTTP 状态码所定,200 就是请求成功了。

至于响应内容中的 success 字段,由业务需求,或者跟前端协商决定。

最后,json 格式可以直接响应列表,所以从某种角度来说,msg,success 字段和 book object key 都是多余的。

最最后,json 格式最后一个字段不能以 "," 结尾,这俩方案都是错的......
otakustay
2021-03-11 15:03:58 +08:00
列表为空是成功,单条数据不存在是失败
namelosw
2021-03-11 15:27:59 +08:00
200 + [] -> 成功
400 + {message: "输入不对"} -> 失败
404 + {message: "找不着“} -> 失败
500 + {message: "找着找着挂了"} -> 失败
IvanLi127
2021-03-11 16:19:26 +08:00
前端入参合法的话,你找不到也是合法的话,那就是成功,返回空数组。否则前端错 4xx,后端错 5xx 。
前提是调用的是是图书资源。
如果是调用例如作者的图书,找不到作者导致找不到书的,得 404 。最后,还是好好用状态码,返回的内容也最好不要嵌套没用的层。。。好难看呢(逃
ieiayaobb
2021-03-11 16:43:42 +08:00
query 和 get 是两种语义,query 可以返回列表是空,而 get 代表你是明确知道某个 id 去获取,如果找不到就是 404
xuanbg
2021-03-11 17:19:35 +08:00
资源名称是 knowledge 怎么办啊啊啊啊啊啊啊
@quan01994

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/760684

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX