PTT推薦

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

看板Soft_Job標題[討論] API沒資料,回200還是404比較好作者
Geison
(Angels)
時間推噓56 推:56 噓:0 →:83

我看有些是狀態碼200,空data

但有些又是做404,然後回個message 數據不存在之類的


這哪一種做法比較好?

--

※ PTT留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.168.185.127 (臺灣)
PTT 網址

ntpuisbest06/22 10:48加個Status判斷是否為空會好點嗎?

vi00024606/22 10:49200啊 是說這問題你可以問同事吧

CaptPlanet06/22 10:50200

godddddd06/22 10:50Body empty 204

godddddd06/22 10:50Error code 404

godddddd06/22 10:50Success and return body 200

godddddd06/22 10:50前公司用這樣表示

bheegrl06/22 10:54200,回404我會覺得沒打到,當然這個可以談的

LINGZ06/22 10:56回404,怎麼跟api不存在區別?

Romulus06/22 11:10看沒資料的物理意義 如果是他不能沒有但是沒有就400/404

Romulus06/22 11:11如果沒有資料是正常狀況就回200空data 不推薦204

Romulus06/22 11:11204比較像是那種永遠不會有回傳的API回的

Romulus06/22 11:13另外404純留給打錯path/API不存在比較好懂

giacch06/22 11:13RESTful的鍋

bronx080706/22 11:29200 有找到資源,但該資源返回空資料

gura952706/22 11:39http status不是這樣用的

devilkool06/22 11:40怎麼會用404....

aidansky098906/22 11:46看錯誤原因,通常是200給reason或403

z5656233706/22 11:46404 只會覺得 url 打錯吧

alihue06/22 11:54你不會多一個 numFound 逆

popmentos06/22 12:04看收到空值後,你的後續動作是什麼,狀態碼提示你之後

popmentos06/22 12:04要導向哪個動作。

bill020506/22 12:12當然是200..404是針對path不存在而不是資料不存在

bill020506/22 12:15除非你說是像這樣/{id} 沒資料給404合理(?!

mike846906/22 12:34200, 400-499 用在用戶端錯誤

yutou8806/22 12:34404會覺得url打錯+1

longlongint06/22 12:50預料之內 200 預料之外 404

longlongint06/22 12:50200 功能正常,查無此資料

longlongint06/22 12:51404 有點像在反問 caller 你在做什麼

Lhmstu06/22 12:53200吧

youtuuube00006/22 12:55推10樓

Hsins06/22 13:09如果是以 RESTful 角度去設計的話,舉 /users/<USERNAME>

Hsins06/22 13:10為例,當 <USERNAME> 的資源不存在時,返回狀態碼 404

Hsins06/22 13:12比較其他狀態碼:401 (沒有授權) 403 (有授權但權限不夠)

Hsins06/22 13:13... 參考 GitHub REST API 的實現也是這樣做的

Hsins06/22 13:13可是具體還是要看實際場景需不需要這些

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

Hsins06/22 13:15在 SEO 上被降 ranking

EEeliteEE06/22 13:38視你組織 code style 而定

opliya06/22 13:51200 status fail

luke7206/22 13:59REST API的精神是要回歸http status code,回404

luke7206/22 14:00但是相關配套的程式如果處理不好容易出錯,不如回200

Romulus06/22 14:02應該只有403是不行的ㄅ

Jichang06/22 14:14json 的空 是什麼意思

lturtsamuel06/22 14:27空的當然是200阿 我前公司就用404 導致一堆問題 超白

lturtsamuel06/22 14:27

lturtsamuel06/22 14:29api不存在應該也不是404 400比較對 404像是你用名字

lturtsamuel06/22 14:29或id去查結果資料庫沒這東西

ssccg06/22 14:37restful來說是404沒錯啊,只是現在人看到404就覺得網址錯

ssccg06/22 14:47原始http規格就整個URI代表資源,把404限縮到path未實作的

ssccg06/22 14:47反而是後來各種web framework,只是錯的人多了就變對的了

ChungLi556606/22 15:22如果亂打還回200 會被弱掃工具判斷成有弱點

adsl1236706/22 15:26200 msg放查無資料

lturtsamuel06/22 15:26假設是一個論壇 你要找一個看板的文章 給錯看板id那

lturtsamuel06/22 15:27叫做404 有這個看板但沒有文章 那叫做200 就這樣

cloudsan06/22 16:12搜尋無結果200,查詢不存在的使用者404

TheArrow06/22 16:42我都傳204^_^

MyNion06/22 16:49請求成功但response空body,回傳204

MyNion06/22 16:50或是手工點,傳200 + 字串"沒有內容"

sharek06/22 16:56推文看下來似乎沒有標準?內部討論好就好了是嗎

Romulus06/22 17:00是 其實沒有很硬的標準 尤其內部的話真的協調好就好

crazycy06/22 17:00RESTful的話 查詢不存在的ID之類的話就404阿

johnny9406/22 17:32資源不存在跟資源存在只是目前沒有的差別

superpandal06/22 18:59只愛用兩種狀態 錯誤給原因 前端管理錯訊息是冏的 有

superpandal06/22 18:59的還前後端都維護一套更冏

mathrew06/22 19:00你的案例404很怪,404直覺就是錯誤的URL

now9906/22 19:35發生系統錯誤不也404,你要怎麼分辨

now9906/22 19:36不如rtnCode 處理

TheWhack06/22 19:40200比較適合,因為路徑無誤,而且空資料也是一種資料

quickey06/22 19:40404吧 回啥小200

Hsins06/22 19:43發生系統錯誤哪會是 404?拜託不要誤導人

pilor06/22 19:46自己覺得如果是用id找不到回404

pilor06/22 19:46如果是搜尋資料這種會多筆的用200然後是空資料

rollr06/22 19:54回404的可以 fired 了

pokemonmen06/22 20:12有成功就2 開頭 我以為是這樣

moom5030206/22 20:45回404來亂的嗎?

yoyo93002106/22 21:11我的習慣是 user/{id} 是 404 list 的話 200 空陣列

yoyo93002106/22 21:12不過這個還是看團隊約定啦

yoyo93002106/22 21:12畢竟 HTTP Status Code 到底代表協議本身的狀態

yoyo93002106/22 21:12還是 API 提供服務的狀態就有的吵了

yahuichang06/22 21:35唸過廠商HTTP Status Code 404 ,怎麼知道是call 錯,

yahuichang06/22 21:35還真的沒資料。

luke7206/22 21:53REST就只是篇博士論文,學術界嘛,根本沒實戰驗證過

luke7206/22 21:54發明者拿到學位就走人了,哪管你照著做有多少相容問題

Hsins06/22 21:59所以有很多問題啊,拆分粒度不夠或太小都不適合,要嘛拿到

Hsins06/22 22:00太多不必要的資料,要嘛需要層層往下才拿到想要的資料,一

Hsins06/22 22:00個是浪費流量資源,一個是頻繁訪問。所以現在有 GraphQL 嘛

jlhc06/22 22:18200...

opliya06/22 22:39Get query 連id 都找不到回404沒問題,如果有id 就回個200

opliya06/22 22:39 null data

jackflu06/22 23:05水,這個問題不錯喔,是技術又不會太冷門,想多看點討論

MoshPit06/22 23:17當然是200,回傳空陣列即可。404是找不到該route的時候才

MoshPit06/22 23:17回傳

viper970906/22 23:20不要用404比較好吧

sakyle06/22 23:31有這個路徑為什麼是404?

kurtsgm06/22 23:31..........200啦幹

sakyle06/22 23:32都到倉庫翻東西了還跟客人說沒有找到這條路?

alan310006/23 00:53刻意把404設計成單獨給bad url用不是給有心人猜嘛

alan310006/23 01:15不然你去參考大廠怎樣做 我所知aws azure是回傳404

alan310006/23 01:28url,參數...等等client錯誤大多是回400+reason

jinmin8806/23 01:33資源不存在回404..單純沒body回204

stupid031906/23 07:10200

sharek06/23 07:20既然沒有標準,沒資料回404也還好吧,文件or講好就好了

sharek06/23 07:36404也不一定只能代表路徑不存在

DrTech06/23 08:22200。或改用204。看來原文基礎沒學好。這些 status code是

DrTech06/23 08:22用來判斷什麼都不太清楚。API存取正常就是要回2xx。

DrTech06/23 08:24RFC2616,明確規範,2xx是成功。4xx,是client error. 。

DrTech06/23 08:24沒錯誤不要用4xx。

DrTech06/23 08:26不懂的去查國際標準怎麼寫。

willy020606/23 11:54https://i.imgur.com/8jZ79uy.jpg

圖 API沒資料,回200還是404比較好

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

ssccg06/23 15:17較好,不要混在一起就好

za75518806/23 17:37這個吵不完啦XDD 不過我認識的前端都希望回200

penril032606/23 18:22200啊 404感覺是path錯了

bill020506/23 20:41如果本來是預期為清單類型 結果沒有資料 那就是200

bill020506/23 20:42但如果最後是指定資源值 404或是200就比較有爭議

bill020506/23 20:42但假如是類似/api/users/<user> 找不到 丟404好像很合理

jinmin8806/24 01:07建議website跟api server分開,不然就真的404會很混亂.

preisner06/24 08:13絕對不是用404, 那是http的error code拿來混用絕對不好

strlen06/24 11:43空資料是空資料 伺服有問題是伺服有問題 這兩回事

strlen06/24 11:43只要API能正常運作 都不應該吐200以外的東西

strlen06/24 11:43空資料只是目前沒有東西 不代表之後也不會有東西

strlen06/24 11:44API資料狀態 那是連線狀態確認沒問題之後的事

strlen06/24 11:45資料狀態 與 連線狀態 是完全不同的東西

hegemon06/24 11:48樓上你可以用204更精確

Romulus06/24 16:29可是404和連線狀態沒有半毛錢關係

askacis06/25 12:08200,body看資料格式,xml的話就帶空元素之類的方式

nayeonmywife06/25 13:54基本上200是代表回傳成功,至於有沒有資料就裝在dat

nayeonmywife06/25 13:54a吧,目前是這樣規範

npkalala06/25 17:39404 Not found不能只看字面意思吧,要了解一下內涵

strlen06/25 22:16樓上是不是以為連線狀態指得是你的網路狀態?

strlen06/25 22:16我說的是連到該伺服器API的狀態好嗎?

strlen06/25 22:20「狀態」也不一定只是連不上 還可能有其他種狀況

bill020506/26 11:16404不代表不用在body資料吧 預設格式還是要有

honestyer06/28 14:55用404太怪異了吧..200 回status

noiretblanc06/29 20:21200

jl4006/30 22:20424

shimachokong07/02 18:34200,沒有那個 api才是 404

hannah526907/08 03:13404新理解..