技术解析

restful api 的返回值问题
0
2021-06-09 13:07:11
idczone

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

方案二: { msg: '查询结果为空', success: f大带宽服务器alse, books: [], }


restful 用 http 状态码来表示是否成功。

参数不符合要求,失败。
参数符合要求,但没有结果,成功。
参数符合要求,但约定接口必须返回数据,失败(少见)

接 一般列表为空,也算成功,但是获取指定唯一数据( ID )为空时应该时 404 失败。

具体可以参考这个 。http://www.ruanyifeng.com/blog/2014/05/restful_api.html

“查询结果为空” 和 “books: []” 是冗余信息
books: []已经表示结果为空了,何必 msg 重复一遍。而且结果为空并非错误,success 为何要设置成 false ?

RESTful 是一种指导思想,而不是具体的规定。三楼的做法与我们比较一致,但四楼的文章则存在很大争议,主要是该不该用复数的问题。
所以,不要死抠这种问题,自己内部约定好空列表到底算成功还是失败即可。

。。。这两个方案都是脱裤子放屁类型
你查询成功,接口没炸,就返回 200 。
怼个 results,或者愿意叫 items,也好。
前端检测数组是否为空来判断有没查询接过。

老哥,也是做图书项目的呀,

正确:{code:0 , data: []}
错误:{code: 大于 0}

同意,restful 应该被看做一种思想。
本问题就是想了解下这种情况通用的做法是什么,不是探讨 restful 规范。

根据唯一标识查详情查不到为 404 或 {success: false},列表没有数据是 {success: true, data: []}

首先,接口请求的响应状态由 HTTP 状态码所定,200 就是请求成功了。
至于响应内容中的 success 字段,由业务需求,或者跟前端协商决定。
最后,json 格式可以直接响应列表,所以从某种角度来说,msg,success 字段和 book object key 都是多余的。
最最后,json 格式最后一个字段不能以 "," 结尾,这俩方案都是错的......

列表为空是成功,单条数据不存在是失败

200 + [] -> 成功
400 + {message: "输入不对"} -> 失败
404 + {message: "找不着“} -> 失败
500 + {message: "找着找着挂了"} -> 失败

前端入参合法的话,你找不到也是合法的话,那就是成功,返回空数组。否则前端错 4xx,后端错 5xx 。
前提是调用的是是图书资源。
如果是调用例如作者的图书,找不到作者导致找不到书的,得 404 。最后,还是好好用状态码,返回的内容也最好不要嵌套没用的层。。。好难看呢(逃

query 和 get 是两种语义,query 可以返回列表是空,而 get 代表你是明确知道某个 id 去获取,如果找不到就是 404

资源名称是 knowledge 怎么办啊啊啊啊啊啊啊
@quan01994

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服