看板 Soft_Job
標題
[討論] API沒資料,回200還是404比較好
作者 Geison
時間 2022/06/22 10:38:22
人氣 推:56 噓:0 留言:138
分享給朋友
我看有些是狀態碼200,空data 但有些又是做404,然後回個message 數據不存在之類的 這哪一種做法比較好? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.168.185.127 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1655865504.A.17A.html
ntpuisbest: 加個Status判斷是否為空會好點嗎? 06/22 10:48
vi000246: 200啊 是說這問題你可以問同事吧 06/22 10:49
CaptPlanet: 200 06/22 10:50
godddddd: Body empty 204 06/22 10:50
godddddd: Error code 404 06/22 10:50
godddddd: Success and return body 200 06/22 10:50
godddddd: 前公司用這樣表示 06/22 10:50
bheegrl: 200,回404我會覺得沒打到,當然這個可以談的 06/22 10:54
LINGZ: 回404,怎麼跟api不存在區別? 06/22 10:56
Romulus: 看沒資料的物理意義 如果是他不能沒有但是沒有就400/404 06/22 11:10
Romulus: 如果沒有資料是正常狀況就回200空data 不推薦204 06/22 11:11
Romulus: 204比較像是那種永遠不會有回傳的API回的 06/22 11:11
Romulus: 另外404純留給打錯path/API不存在比較好懂 06/22 11:13
giacch: RESTful的鍋 06/22 11:13
bronx0807: 200 有找到資源,但該資源返回空資料 06/22 11:29
gura9527: http status不是這樣用的 06/22 11:39
devilkool: 怎麼會用404.... 06/22 11:40
aidansky0989: 看錯誤原因,通常是200給reason或403 06/22 11:46
z56562337: 404 只會覺得 url 打錯吧 06/22 11:46
alihue: 你不會多一個 numFound 逆 06/22 11:54
popmentos: 看收到空值後,你的後續動作是什麼,狀態碼提示你之後 06/22 12:04
popmentos: 要導向哪個動作。 06/22 12:04
bill0205: 當然是200..404是針對path不存在而不是資料不存在 06/22 12:12
bill0205: 除非你說是像這樣/{id} 沒資料給404合理(?! 06/22 12:15
mike8469: 200, 400-499 用在用戶端錯誤 06/22 12:34
yutou88: 404會覺得url打錯+1 06/22 12:34
longlongint: 預料之內 200 預料之外 404 06/22 12:50
longlongint: 200 功能正常,查無此資料 06/22 12:50
longlongint: 404 有點像在反問 caller 你在做什麼 06/22 12:51
Lhmstu: 200吧 06/22 12:53
youtuuube000: 推10樓 06/22 12:55
Hsins: 如果是以 RESTful 角度去設計的話,舉 /users/<USERNAME> 06/22 13:09
Hsins: 為例,當 <USERNAME> 的資源不存在時,返回狀態碼 404 06/22 13:10
Hsins: 比較其他狀態碼:401 (沒有授權) 403 (有授權但權限不夠) 06/22 13:12
Hsins: ... 參考 GitHub REST API 的實現也是這樣做的 06/22 13:13
Hsins: 可是具體還是要看實際場景需不需要這些 06/22 13:13
Hsins: 今天如果是請求 HTML 頁面資源的話,早年沒東西塞 200 會 06/22 13:15
Hsins: 在 SEO 上被降 ranking 06/22 13:15
EEeliteEE: 視你組織 code style 而定 06/22 13:38
opliya: 200 status fail 06/22 13:51
luke72: REST API的精神是要回歸http status code,回404 06/22 13:59
luke72: 但是相關配套的程式如果處理不好容易出錯,不如回200 06/22 14:00
Romulus: 應該只有403是不行的ㄅ 06/22 14:02
Jichang: json 的空 是什麼意思 06/22 14:14
lturtsamuel: 空的當然是200阿 我前公司就用404 導致一堆問題 超白 06/22 14:27
lturtsamuel: 癡 06/22 14:27
lturtsamuel: api不存在應該也不是404 400比較對 404像是你用名字 06/22 14:29
lturtsamuel: 或id去查結果資料庫沒這東西 06/22 14:29
ssccg: restful來說是404沒錯啊,只是現在人看到404就覺得網址錯 06/22 14:37
ssccg: 原始http規格就整個URI代表資源,把404限縮到path未實作的 06/22 14:47
ssccg: 反而是後來各種web framework,只是錯的人多了就變對的了 06/22 14:47
ChungLi5566: 如果亂打還回200 會被弱掃工具判斷成有弱點 06/22 15:22
adsl12367: 200 msg放查無資料 06/22 15:26
lturtsamuel: 假設是一個論壇 你要找一個看板的文章 給錯看板id那 06/22 15:26
lturtsamuel: 叫做404 有這個看板但沒有文章 那叫做200 就這樣 06/22 15:27
cloudsan: 搜尋無結果200,查詢不存在的使用者404 06/22 16:12
TheArrow: 我都傳204^_^ 06/22 16:42
MyNion: 請求成功但response空body,回傳204 06/22 16:49
MyNion: 或是手工點,傳200 + 字串"沒有內容" 06/22 16:50
sharek: 推文看下來似乎沒有標準?內部討論好就好了是嗎 06/22 16:56
Romulus: 是 其實沒有很硬的標準 尤其內部的話真的協調好就好 06/22 17:00
crazycy: RESTful的話 查詢不存在的ID之類的話就404阿 06/22 17:00
johnny94: 資源不存在跟資源存在只是目前沒有的差別 06/22 17:32
superpandal: 只愛用兩種狀態 錯誤給原因 前端管理錯訊息是冏的 有 06/22 18:59
superpandal: 的還前後端都維護一套更冏 06/22 18:59
mathrew: 你的案例404很怪,404直覺就是錯誤的URL 06/22 19:00
now99: 發生系統錯誤不也404,你要怎麼分辨 06/22 19:35
now99: 不如rtnCode 處理 06/22 19:36
TheWhack: 200比較適合,因為路徑無誤,而且空資料也是一種資料 06/22 19:40
quickey: 404吧 回啥小200 06/22 19:40
Hsins: 發生系統錯誤哪會是 404?拜託不要誤導人 06/22 19:43
pilor: 自己覺得如果是用id找不到回404 06/22 19:46
pilor: 如果是搜尋資料這種會多筆的用200然後是空資料 06/22 19:46
rollr: 回404的可以 fired 了 06/22 19:54
pokemonmen: 有成功就2 開頭 我以為是這樣 06/22 20:12
moom50302: 回404來亂的嗎? 06/22 20:45
yoyo930021: 我的習慣是 user/{id} 是 404 list 的話 200 空陣列 06/22 21:11
yoyo930021: 不過這個還是看團隊約定啦 06/22 21:12
yoyo930021: 畢竟 HTTP Status Code 到底代表協議本身的狀態 06/22 21:12
yoyo930021: 還是 API 提供服務的狀態就有的吵了 06/22 21:12
yahuichang: 唸過廠商HTTP Status Code 404 ,怎麼知道是call 錯, 06/22 21:35
yahuichang: 還真的沒資料。 06/22 21:35
luke72: REST就只是篇博士論文,學術界嘛,根本沒實戰驗證過 06/22 21:53
luke72: 發明者拿到學位就走人了,哪管你照著做有多少相容問題 06/22 21:54
Hsins: 所以有很多問題啊,拆分粒度不夠或太小都不適合,要嘛拿到 06/22 21:59
Hsins: 太多不必要的資料,要嘛需要層層往下才拿到想要的資料,一 06/22 22:00
Hsins: 個是浪費流量資源,一個是頻繁訪問。所以現在有 GraphQL 嘛 06/22 22:00
jlhc: 200... 06/22 22:18
opliya: Get query 連id 都找不到回404沒問題,如果有id 就回個200 06/22 22:39
opliya: null data 06/22 22:39
jackflu: 水,這個問題不錯喔,是技術又不會太冷門,想多看點討論 06/22 23:05
MoshPit: 當然是200,回傳空陣列即可。404是找不到該route的時候才 06/22 23:17
MoshPit: 回傳 06/22 23:17
viper9709: 不要用404比較好吧 06/22 23:20
sakyle: 有這個路徑為什麼是404? 06/22 23:31
kurtsgm: ..........200啦幹 06/22 23:31
sakyle: 都到倉庫翻東西了還跟客人說沒有找到這條路? 06/22 23:32
alan3100: 刻意把404設計成單獨給bad url用不是給有心人猜嘛 06/23 00:53
alan3100: 不然你去參考大廠怎樣做 我所知aws azure是回傳404 06/23 01:15
alan3100: url,參數...等等client錯誤大多是回400+reason 06/23 01:28
jinmin88: 資源不存在回404..單純沒body回204 06/23 01:33
stupid0319: 200 06/23 07:10
sharek: 既然沒有標準,沒資料回404也還好吧,文件or講好就好了 06/23 07:20
sharek: 404也不一定只能代表路徑不存在 06/23 07:36
DrTech: 200。或改用204。看來原文基礎沒學好。這些 status code是 06/23 08:22
DrTech: 用來判斷什麼都不太清楚。API存取正常就是要回2xx。 06/23 08:22
DrTech: RFC2616,明確規範,2xx是成功。4xx,是client error. 。 06/23 08:24
DrTech: 沒錯誤不要用4xx。 06/23 08:24
DrTech: 不懂的去查國際標準怎麼寫。 06/23 08:26
ssccg: 其實這篇原PO並沒有限定說在問RESTful,所以應該沒有哪個比 06/23 15:17
ssccg: 較好,不要混在一起就好 06/23 15:17
za755188: 這個吵不完啦XDD 不過我認識的前端都希望回200 06/23 17:37
penril0326: 200啊 404感覺是path錯了 06/23 18:22
bill0205: 如果本來是預期為清單類型 結果沒有資料 那就是200 06/23 20:41
bill0205: 但如果最後是指定資源值 404或是200就比較有爭議 06/23 20:42
bill0205: 但假如是類似/api/users/<user> 找不到 丟404好像很合理 06/23 20:42
jinmin88: 建議website跟api server分開,不然就真的404會很混亂. 06/24 01:07
preisner: 絕對不是用404, 那是http的error code拿來混用絕對不好 06/24 08:13
strlen: 空資料是空資料 伺服有問題是伺服有問題 這兩回事 06/24 11:43
strlen: 只要API能正常運作 都不應該吐200以外的東西 06/24 11:43
strlen: 空資料只是目前沒有東西 不代表之後也不會有東西 06/24 11:43
strlen: API資料狀態 那是連線狀態確認沒問題之後的事 06/24 11:44
strlen: 資料狀態 與 連線狀態 是完全不同的東西 06/24 11:45
hegemon: 樓上你可以用204更精確 06/24 11:48
Romulus: 可是404和連線狀態沒有半毛錢關係 06/24 16:29
askacis: 200,body看資料格式,xml的話就帶空元素之類的方式 06/25 12:08
nayeonmywife: 基本上200是代表回傳成功,至於有沒有資料就裝在dat 06/25 13:54
nayeonmywife: a吧,目前是這樣規範 06/25 13:54
npkalala: 404 Not found不能只看字面意思吧,要了解一下內涵 06/25 17:39
strlen: 樓上是不是以為連線狀態指得是你的網路狀態? 06/25 22:16
strlen: 我說的是連到該伺服器API的狀態好嗎? 06/25 22:16
strlen: 「狀態」也不一定只是連不上 還可能有其他種狀況 06/25 22:20
bill0205: 404不代表不用在body資料吧 預設格式還是要有 06/26 11:16
honestyer: 用404太怪異了吧..200 回status 06/28 14:55
noiretblanc: 200 06/29 20:21
jl40: 424 06/30 22:20
shimachokong: 200,沒有那個 api才是 404 07/02 18:34
分享給朋友
近期熱門文章
Soft_Job熱門文章
分享給朋友