RESTful 的增删改查成功应该返回什么状态码?

2020-07-14 15:13:54 +08:00
 Vimax

RESTful 的 GET POST PUT DELETE 如果操作成功应该返回什么状态码呢?

用 200,201,202,204 代表 4 种请求的成功合适吗?

请求成功

如果 GET POST PUT   DETELE 请求,数据库执行结果都为 0.又如何返回 HTTP 状态码呢?

是返回 404 not found 吗?

另外一个问题

请求方式的数据类型: GET 和 DELETE 是否[不能]或[不推荐]使用 JSON 数据的形式.

前端使用的是 VUE axios 发送请求,之前 DELETE 发送 JSON 数据,后端无法接收到.

目前 4 种请求方式对应使用的数据类型是:

10685 次点击
所在节点    Java
132 条回复
lff0305
2020-07-15 17:31:28 +08:00
个人觉得用 200 加上 body 里的信息。
404 的话不知道是成功了,还是中间什么地方出现了问题(网关,负载均衡)
hantsy
2020-07-15 17:31:40 +08:00
整个说话跟拉稀一样,还在这里呛人。
@est
est
2020-07-15 17:34:09 +08:00
@hantsy 你拉的都是干的,还是粉色的。
hantsy
2020-07-15 17:35:26 +08:00
@est 我看你挺喜欢的,一上来不管 3721 就全收了。
est
2020-07-15 17:38:30 +08:00
@hantsy 这位是看拉稀看出 20 年经验了。 👍
hantsy
2020-07-15 17:39:40 +08:00
@est 被你说中了。
iseki
2020-07-15 17:42:18 +08:00
天天吵这点破事…千万别给出错的请求会 200 就好…也别自己造状态码,相应体内部的错误信息能用 enum 描述的别用莫名其妙的一串数字好不好…
est
2020-07-15 17:43:26 +08:00
@hantsy 多吃点,不要停,吃习惯了就不呛了。
iseki
2020-07-15 17:47:52 +08:00
一切请求会 200 简直是在给自己找麻烦…各种麻烦
hantsy
2020-07-15 17:49:50 +08:00
@est 现在你们这种人我早看就习惯了。

10 年前国内还有很多软件公司,开发的时候程序员还保留有一点自己的修为,懂什么叫软件品质。现在国内几乎没有软件公司,国内互联网公司基本是资本运作的结果,做出来的东西只要能跑就行了。

十年前我就不在职场了。
est
2020-07-15 17:55:14 +08:00
@hantsy 你那么讲究品质,你倒是说说

> 订单 200 表示存在,404 表示不存在,那已拆分订单如何表示?

这个 API 的 code 怎么设计好?

Roy Fielding 还主导设计了 Apache HTTPd 没错吧 ,你这么喜欢舔请问你现在还用这货吗?
hantsy
2020-07-15 17:59:58 +08:00
》 Roy Fielding 还主导设计了 Apache HTTPd 没错吧

看来这次说话小心了点,知道说话前查资料了,这个没错啊。有没有人用,自己去 Google 搜索 结果比较一下就知道了。
est
2020-07-15 18:02:27 +08:00
@hantsy 我不问有不有人用,只问你用不用。毕竟你把别人 20 年前的论文当宝一样耀武扬威呢。

还有

> 订单 200 表示存在,404 表示不存在,那已拆分订单如何表示?


你倒是用你优雅的品质设计一个 RESTful 出来
iugo
2020-07-15 18:11:03 +08:00
@libook

不是纠结一定要 REST, 而是认为 HTTP 状态码在一些地方应该被使用.

Web 最初是为了描述网页资源.

如果一个文章网页曾经存在, 但因为一些原因被删除了.

客户端是浏览器.

这时后端返回 404 是不是更好一些?

---

再说 API.

如果请求 `GET /item?id=123`, 数据库中没这一数据, 这时候状态返回 200, 再给数据不存在的业务代码是合理的.

但是如果请求 `GET /item/123`, 数据库中没这一数据, 我认为这时候状态返回 404 而不是 200 才是合适的.

具体用哪种风格好, 我不评论. 只是主题说了 "RESTful 的增删改查成功应该返回什么状态码?", 而不是 "API 的增删改查成功应该返回什么状态码?", 所以主题说的应该是上例中的后者.
hantsy
2020-07-15 18:11:23 +08:00
从你的话,我又一次感觉到你在一直说 Fielding 博士不如你。

我写主要写 Java,为什么要用 Apache ?

对于标准来讲 15 年前的东西现在一点不会过时,一般互联网标准讨论超过 10 年没定好的多的是。


每个订单有自己的 OrderStatus

Get /ordres/originalorderid

200
{
orderstatus:
sublist:[拆分子订单号列表] 当然这里最好是 Level 3, 用 Link
}
hantsy
2020-07-15 18:12:29 +08:00
@est 散了吧,不要再 at 我了。
est
2020-07-15 18:19:25 +08:00
@hantsy 嗯。我最后 at 你一次。orderstatus 和 http status,明明都是表示单一的订单状态,还要套 2 层,老优雅了。
iugo
2020-07-15 18:20:35 +08:00
不是说 REST 多好多好, 大家都该用.

而是主题问的是 REST, 所以就这个来回答不跑题.

1. REST 到底好不好用, 这个见仁见智, 但较为老旧简单难以适应复杂需求这点可能更多人认同.
2. HTTP 状态码到底怎么用, 我认为还是要看情况吧, 所有业务一旦进入处理流程都 200 太绝对了.
hantsy
2020-07-15 18:23:05 +08:00
@est 数据 State 与 Http Status 有什么关系?
hantsy
2020-07-15 18:27:24 +08:00
一个订单 10,8 种状态,订单 Oderstatus 只是数据属性 ,只要这个订单存在,返回订单,就可以进去。这东西能和 http status 能扯到一起,我只能服了你。

以前我很难理解,V 站那么多人说查询就会想 SQL 怎么写,你这思维大概知道了。

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

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

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

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

© 2021 V2EX