Re: [讨论] API没资料,回200还是404比较好

楼主: yfr   2022-06-22 15:17:49
虽然我不是微软派的,但是不得不说他们文件写得真是认真
https://docs.microsoft.com/zh-tw/azure/architecture/best-practices/api-design
好入手,广度,深度也都有一定程度的水准
作者: ssccg (23)   2022-06-22 15:28:00
你贴的这篇就建议404啊
作者: x51811danny (人)   2022-06-22 16:01:00
找不到资源!=没资料
作者: xup6y3ru04 (奇奇奇奇奇)   2022-06-22 16:17:00
这篇是说要回传204
作者: s06yji3 (阿南)   2022-06-22 16:25:00
用ID Get的时候找不到资源的情况是404吧
楼主: yfr   2022-06-22 16:30:00
大家热烈讨论还蛮棒的,资源不存在跟没有结果是细微的不同
作者: smalldra (ha。)   2022-06-22 16:36:00
原来正解是204 ...
作者: crazycy (LCY)   2022-06-22 17:01:00
照这篇就是要404阿...资源不存在不就是找不到资料(e.g.数据库没这笔资料)204是指说找到这笔资料,但是内容是空的
作者: Romulus (Säubern Mode)   2022-06-22 17:03:00
这篇并不是说要回传204“未包含任何 respose 主体”并不是“未包含任何资料”
作者: iterator (rotareti)   2022-06-22 17:04:00
for example, a search operation yielding no matchesmight be implemented with this behavior.
作者: Romulus (Säubern Mode)   2022-06-22 17:05:00
喔没事 我切到英文版了 当我没说(这篇建议用204
作者: iterator (rotareti)   2022-06-22 17:05:00
不过我觉得是如果想要回传是 {} 空阵列, 那就是 200如果要直接表示没有要回传的东西, 就用 204
作者: Romulus (Säubern Mode)   2022-06-22 17:07:00
我个人不建议204的原因是,要是客户端一律把回传值先拿去parse成json,那204或200不带讯息都会出错
作者: s06yji3 (阿南)   2022-06-22 17:11:00
客户一律parse json那是客户不看使用说明的问题?GetById和search应该是不同的操作
作者: ssccg (23)   2022-06-22 17:15:00
search operation和resource是两回事
作者: Romulus (Säubern Mode)   2022-06-22 17:17:00
你可以说是客户的问题 你也可以减少客户的犯错空间
作者: ssccg (23)   2022-06-22 17:17:00
什么叫做resource,什么叫operation上面的段落有写有些实作没办法对应成资源的,可以把这种“非资源”的作业公开成虚拟资源,如/add?operand1=99&operand2=1简单说, /名词/{id} 这种找不到应该用404动词?参数={value1}&参数={value2} 这种才是找不到时可以用204的
作者: Hsins (翔)   2022-06-22 17:25:00
承楼上说的,要根据 RESTful 的设计应该尽量避免 URL 带有动词的操作。可以在页面的 route 上出现 login,但呼叫后端时,登入的操作是要获取 resource(以这种情景通常资源会命名为 session
作者: ssccg (23)   2022-06-22 17:27:00
更正一下,应该说作业结果是没结果时用204,找不到还是404
作者: s06yji3 (阿南)   2022-06-22 17:27:00
这么明确的东西我不觉得是减少客户犯错空间。
作者: Jichang (C.C.Lemon)   2022-06-22 18:17:00
404 无法表达是网址错 还是没资源
作者: qoo456alex   2022-06-22 20:39:00
用path parameter 的方式就回404,不是的话就用body回空array 然后200
作者: DrTech (竹科管理处网军研发人员)   2022-06-23 08:30:00
不懂的人去看国际标准: RFC2616。4xx开头是 error 。2xx开头是 Info。
作者: Hsins (翔)   2022-06-23 08:33:00
要看也是看 2014 后更新调整的 RFC7231,这个版本才把 REST风格考虑进去,叙述中多了对表现层(representation)的解释
作者: Romulus (Säubern Mode)   2022-06-23 09:24:00
其实就在这个月出了RFC9110 XD
作者: Hsins (翔)   2022-06-23 09:25:00
RFC9110 针对 Status Code 的叙述跟 RFC7231 没有太多差异

Links booklink

Contact Us: admin [ a t ] ucptt.com