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

看板Soft_Job作者 (Angels)時間1年前 (2022/06/22 10:38), 編輯推噓53(53081)
留言134則, 66人參與, 1年前最新討論串1/7 (看更多)
我看有些是狀態碼200,空data 但有些又是做404,然後回個message 數據不存在之類的 這哪一種做法比較好? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.168.185.127 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1655865504.A.17A.html

06/22 10:48, 1年前 , 1F
加個Status判斷是否為空會好點嗎?
06/22 10:48, 1F

06/22 10:49, 1年前 , 2F
200啊 是說這問題你可以問同事吧
06/22 10:49, 2F

06/22 10:50, 1年前 , 3F
200
06/22 10:50, 3F

06/22 10:50, 1年前 , 4F
Body empty 204
06/22 10:50, 4F

06/22 10:50, 1年前 , 5F
Error code 404
06/22 10:50, 5F

06/22 10:50, 1年前 , 6F
Success and return body 200
06/22 10:50, 6F

06/22 10:50, 1年前 , 7F
前公司用這樣表示
06/22 10:50, 7F

06/22 10:54, 1年前 , 8F
200,回404我會覺得沒打到,當然這個可以談的
06/22 10:54, 8F

06/22 10:56, 1年前 , 9F
回404,怎麼跟api不存在區別?
06/22 10:56, 9F

06/22 11:10, 1年前 , 10F
看沒資料的物理意義 如果是他不能沒有但是沒有就400/404
06/22 11:10, 10F

06/22 11:11, 1年前 , 11F
如果沒有資料是正常狀況就回200空data 不推薦204
06/22 11:11, 11F

06/22 11:11, 1年前 , 12F
204比較像是那種永遠不會有回傳的API回的
06/22 11:11, 12F

06/22 11:13, 1年前 , 13F
另外404純留給打錯path/API不存在比較好懂
06/22 11:13, 13F

06/22 11:13, 1年前 , 14F
RESTful的鍋
06/22 11:13, 14F

06/22 11:29, 1年前 , 15F
200 有找到資源,但該資源返回空資料
06/22 11:29, 15F

06/22 11:39, 1年前 , 16F
http status不是這樣用的
06/22 11:39, 16F

06/22 11:40, 1年前 , 17F
怎麼會用404....
06/22 11:40, 17F

06/22 11:46, 1年前 , 18F
看錯誤原因,通常是200給reason或403
06/22 11:46, 18F

06/22 11:46, 1年前 , 19F
404 只會覺得 url 打錯吧
06/22 11:46, 19F

06/22 11:54, 1年前 , 20F
你不會多一個 numFound 逆
06/22 11:54, 20F

06/22 12:04, 1年前 , 21F
看收到空值後,你的後續動作是什麼,狀態碼提示你之後
06/22 12:04, 21F

06/22 12:04, 1年前 , 22F
要導向哪個動作。
06/22 12:04, 22F

06/22 12:12, 1年前 , 23F
當然是200..404是針對path不存在而不是資料不存在
06/22 12:12, 23F

06/22 12:15, 1年前 , 24F
除非你說是像這樣/{id} 沒資料給404合理(?!
06/22 12:15, 24F

06/22 12:34, 1年前 , 25F
200, 400-499 用在用戶端錯誤
06/22 12:34, 25F

06/22 12:34, 1年前 , 26F
404會覺得url打錯+1
06/22 12:34, 26F

06/22 12:50, 1年前 , 27F
預料之內 200 預料之外 404
06/22 12:50, 27F

06/22 12:50, 1年前 , 28F
200 功能正常,查無此資料
06/22 12:50, 28F

06/22 12:51, 1年前 , 29F
404 有點像在反問 caller 你在做什麼
06/22 12:51, 29F

06/22 12:53, 1年前 , 30F
200吧
06/22 12:53, 30F

06/22 12:55, 1年前 , 31F
推10樓
06/22 12:55, 31F

06/22 13:09, 1年前 , 32F
如果是以 RESTful 角度去設計的話,舉 /users/<USERNAME>
06/22 13:09, 32F

06/22 13:10, 1年前 , 33F
為例,當 <USERNAME> 的資源不存在時,返回狀態碼 404
06/22 13:10, 33F

06/22 13:12, 1年前 , 34F
比較其他狀態碼:401 (沒有授權) 403 (有授權但權限不夠)
06/22 13:12, 34F

06/22 13:13, 1年前 , 35F
... 參考 GitHub REST API 的實現也是這樣做的
06/22 13:13, 35F

06/22 13:13, 1年前 , 36F
可是具體還是要看實際場景需不需要這些
06/22 13:13, 36F

06/22 13:15, 1年前 , 37F
今天如果是請求 HTML 頁面資源的話,早年沒東西塞 200 會
06/22 13:15, 37F

06/22 13:15, 1年前 , 38F
在 SEO 上被降 ranking
06/22 13:15, 38F

06/22 13:38, 1年前 , 39F
視你組織 code style 而定
06/22 13:38, 39F
還有 55 則推文
06/22 23:31, 1年前 , 95F
有這個路徑為什麼是404?
06/22 23:31, 95F

06/22 23:31, 1年前 , 96F
..........200啦幹
06/22 23:31, 96F

06/22 23:32, 1年前 , 97F
都到倉庫翻東西了還跟客人說沒有找到這條路?
06/22 23:32, 97F

06/23 00:53, 1年前 , 98F
刻意把404設計成單獨給bad url用不是給有心人猜嘛
06/23 00:53, 98F

06/23 01:15, 1年前 , 99F
不然你去參考大廠怎樣做 我所知aws azure是回傳404
06/23 01:15, 99F

06/23 01:28, 1年前 , 100F
url,參數...等等client錯誤大多是回400+reason
06/23 01:28, 100F

06/23 01:33, 1年前 , 101F
資源不存在回404..單純沒body回204
06/23 01:33, 101F

06/23 07:10, 1年前 , 102F
200
06/23 07:10, 102F

06/23 07:20, 1年前 , 103F
既然沒有標準,沒資料回404也還好吧,文件or講好就好了
06/23 07:20, 103F

06/23 07:36, 1年前 , 104F
404也不一定只能代表路徑不存在
06/23 07:36, 104F

06/23 08:22, 1年前 , 105F
200。或改用204。看來原文基礎沒學好。這些 status code是
06/23 08:22, 105F

06/23 08:22, 1年前 , 106F
用來判斷什麼都不太清楚。API存取正常就是要回2xx。
06/23 08:22, 106F

06/23 08:24, 1年前 , 107F
RFC2616,明確規範,2xx是成功。4xx,是client error. 。
06/23 08:24, 107F

06/23 08:24, 1年前 , 108F
沒錯誤不要用4xx。
06/23 08:24, 108F

06/23 08:26, 1年前 , 109F
不懂的去查國際標準怎麼寫。
06/23 08:26, 109F

06/23 11:54, 1年前 , 110F

06/23 15:17, 1年前 , 111F
其實這篇原PO並沒有限定說在問RESTful,所以應該沒有哪個比
06/23 15:17, 111F

06/23 15:17, 1年前 , 112F
較好,不要混在一起就好
06/23 15:17, 112F

06/23 17:37, 1年前 , 113F
這個吵不完啦XDD 不過我認識的前端都希望回200
06/23 17:37, 113F

06/23 18:22, 1年前 , 114F
200啊 404感覺是path錯了
06/23 18:22, 114F

06/23 20:41, 1年前 , 115F
如果本來是預期為清單類型 結果沒有資料 那就是200
06/23 20:41, 115F

06/23 20:42, 1年前 , 116F
但如果最後是指定資源值 404或是200就比較有爭議
06/23 20:42, 116F

06/23 20:42, 1年前 , 117F
但假如是類似/api/users/<user> 找不到 丟404好像很合理
06/23 20:42, 117F

06/24 01:07, 1年前 , 118F
建議website跟api server分開,不然就真的404會很混亂.
06/24 01:07, 118F

06/24 08:13, 1年前 , 119F
絕對不是用404, 那是http的error code拿來混用絕對不好
06/24 08:13, 119F

06/24 11:43, 1年前 , 120F
空資料是空資料 伺服有問題是伺服有問題 這兩回事
06/24 11:43, 120F

06/24 11:43, 1年前 , 121F
只要API能正常運作 都不應該吐200以外的東西
06/24 11:43, 121F

06/24 11:43, 1年前 , 122F
空資料只是目前沒有東西 不代表之後也不會有東西
06/24 11:43, 122F

06/24 11:44, 1年前 , 123F
API資料狀態 那是連線狀態確認沒問題之後的事
06/24 11:44, 123F

06/24 11:45, 1年前 , 124F
資料狀態 與 連線狀態 是完全不同的東西
06/24 11:45, 124F

06/24 11:48, 1年前 , 125F
樓上你可以用204更精確
06/24 11:48, 125F

06/24 16:29, 1年前 , 126F
可是404和連線狀態沒有半毛錢關係
06/24 16:29, 126F

06/25 12:08, 1年前 , 127F
200,body看資料格式,xml的話就帶空元素之類的方式
06/25 12:08, 127F

06/25 13:54, 1年前 , 128F
基本上200是代表回傳成功,至於有沒有資料就裝在dat
06/25 13:54, 128F

06/25 13:54, 1年前 , 129F
a吧,目前是這樣規範
06/25 13:54, 129F

06/25 17:39, 1年前 , 130F
404 Not found不能只看字面意思吧,要了解一下內涵
06/25 17:39, 130F

06/25 22:16, 1年前 , 131F
樓上是不是以為連線狀態指得是你的網路狀態?
06/25 22:16, 131F

06/25 22:16, 1年前 , 132F
我說的是連到該伺服器API的狀態好嗎?
06/25 22:16, 132F

06/25 22:20, 1年前 , 133F
「狀態」也不一定只是連不上 還可能有其他種狀況
06/25 22:20, 133F

06/26 11:16, 1年前 , 134F
404不代表不用在body資料吧 預設格式還是要有
06/26 11:16, 134F
文章代碼(AID): #1Yie2W5w (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1Yie2W5w (Soft_Job)