作者ripple0129 (perry tsai)
看板Soft_Job
标题Re: [讨论] API没资料,回200还是404比较好
时间Thu Jun 23 13:18:31 2022
其实这都只是参考设计
怎样处理都行
前端能接的起来就好
我个人则是倾向200或204
原因没有什麽
在一些前端套件
非2xx是会进exception
正确的URL但是没有资源
会变成理论上不该exception
但是4xx让它进入exception
简单来说在前端的显示上
没有资源与真正的404是有所区别的
如果同为404造成前端在处理上
要再区分404的差异
怎样选择都是一种trade off
我个人的选择会是不造成前端麻烦的方式
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.216.235.228 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1655961513.A.860.html
1F:推 qwe70302: 前端泪推06/23 13:28
2F:→ Hsins: 比较麻烦的是有些路由器会劫持 4xx 状态,然後返回一个自己06/23 13:47
3F:→ Hsins: 的页面…06/23 13:47
4F:→ Hsins: 然後有些人可能误解 404 不能返回页面...06/23 13:50
6F:→ Hsins: GitHub 这样的风险就是有可能被路由器或是浏览器劫持,可是06/23 13:51
7F:→ Hsins: 作法是合乎规范的,反而 CODE 传 200 却给 404 页面是积习06/23 13:51
8F:→ Hsins: 难改了...06/23 13:52
9F:推 kewang: 推这篇06/23 14:01
10F:推 neo5277: 200+1不能只自己爽06/23 14:10
11F:→ ssccg: 有时候明明是标准,但也只能跟一堆不标准乱搞的client妥协06/23 14:47
12F:→ ssccg: web上充满这种事情啦06/23 14:47
13F:→ ssccg: 不过追根究底来说这也可能是API设计或呼叫API的人想法还不06/23 14:52
14F:推 Geison: 推06/23 14:53
15F:→ ssccg: 够适应RESTful,这种资源路径不是查询,极端一点来说client06/23 14:54
16F:→ ssccg: 应该本来就知道资源存在才去存取(由别的API取得id、POST或06/23 14:55
17F:→ ssccg: PUT成功後、HATEOAS...),而不是去试不知道有没有的资源06/23 14:55
18F:推 Hsins: 是,如同 ssccg 大说的,以 REST 风格设计时,理应不会有06/23 14:56
19F:→ Hsins: 「正确的 URL 却没有资源」这件事,因为 URL 就对应资源06/23 14:56
20F:→ Hsins: 使用者想要访问不存在的路径,就是想要拿不存在的资源,此06/23 14:57
21F:→ Hsins: 时的 404 既合乎 HTTP Code 的规范也合乎 REST 风格06/23 14:58
22F:→ Hsins: 在开发资源和时程充足的状况下,发生这种事是要回头检视为 06/23 14:58
23F:→ Hsins: 什麽会访问不存在的路径或者说资源06/23 14:59
24F:→ lazarus1121: 我觉得原po只是想问查无资料的情境吧?06/23 15:23
25F:→ sharek: 身为前端,在UX没有明确设计对於"没有资源"或"路径不存在06/23 18:07
26F:→ sharek: "要呈现的差异,我倾向以发生问题的时候可以迅速让技术团06/23 18:07
27F:→ sharek: 队知道是什麽原因的设计方式,所以终究还是看团队约定06/23 18:07
28F:推 s06yji3: Api未必只有前端会call...06/23 19:13
29F:推 s06yji3: Microservice 的情况api大多是其他後端app在call06/23 19:15
不管哪边call都一样要处理
同样404後要再分析是错误还是空资源
※ 编辑: ripple0129 (49.216.235.228 台湾), 06/23/2022 19:42:25
30F:推 s06yji3: 後端call的时候4xx抛出例外是合理的。 06/23 19:44
31F:推 s06yji3: 包含url正确但是没有资源(GetById时) 06/23 19:46
这样说好了
如果是前端用的api
然後api去取用了资源的api返回404
这样要给前端api返回404还是200
如果这个api是混合多种资源产生的资料
又该怎麽返回资料
当使用404时状况会复杂很多
直白点来说
404符合规范但串接时没有200方便许多
我可以明确知道是URL有问题还是没资料
※ 编辑: ripple0129 (49.216.235.228 台湾), 06/23/2022 20:49:59
32F:推 s06yji3: 这没有简答。混合多种资源的api应该根据业务逻辑设计api 06/23 21:18
33F:→ s06yji3: gateway 来提供服务。上面推文的想法是就单一资源的api 06/23 21:18
34F:→ s06yji3: 来说的。 06/23 21:18
35F:推 s06yji3: 返回200你还是得依靠response body 来判断。跟status cod 06/23 21:22
36F:→ s06yji3: e没有直接的关系 06/23 21:22
37F:推 s06yji3: 另外,空资源是指search 没有结果吗?是的话,200是合理 06/23 21:31
38F:→ s06yji3: 的。这和GetById是不一样的操作。 06/23 21:31
39F:推 Hsins: 混合多种资源的 API 通常不会采 RESTful 设计 06/23 21:46
40F:推 viper9709: 推这篇 06/23 23:53
41F:→ travelerX: 有些企业内部的设备会拦截 200 以外的 response 06/24 16:02