[討論] API沒資料,回200還是404比較好

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

Links booklink

Contact Us: admin [ a t ] ucptt.com