Re: [討論] API沒資料,回200還是404比較好
雖然我不是微軟派的,但是不得不說他們文件寫得真是認真
https://docs.microsoft.com/zh-tw/azure/architecture/best-practices/api-design
好入手,廣度,深度也都有一定程度的水準
---
(感謝ssccg提醒,我更正一下內容跟context
我覺得原文並沒有把case列清楚
仔細想想我覺得大家可能都講對,只是想的東西沒對齊,我就獻醜列了一下
搞不好有人可以補充?
* GET {schema}://{host}:{port}/api/v1.0/members
1. members 資料為空
2. 預設的 page, size 搜尋結果為空陣列
3. 沒有這個 endpoint
* GET {schema}://{host}:{port}/api/v1.0/members/{uuid}
4. 沒有找到對應 uuid 的 member
* GET {schema}://{host}:{port}/api/v1.0/members/{uuid}/properties
5. properties 資料為空
6. 預設的 page, size 搜尋結果為空陣列
7. 沒有這個 endpoint
※ 引述《Geison (Angels)》之銘言:
: 我看有些是狀態碼200,空data
: 但有些又是做404,然後回個message 數據不存在之類的
: 這哪一種做法比較好?
--
你貼的這篇就建議404啊
找不到資源!=沒資料
這篇是說要回傳204
用ID Get的時候找不到資源的情況是404吧
大家熱烈討論還蠻棒的,資源不存在跟沒有結果是細微的不同
原來正解是204 ...
照這篇就是要404阿...
資源不存在不就是找不到資料(e.g.資料庫沒這筆資料)
204是指說找到這筆資料,但是內容是空的
這篇並不是說要回傳204
「未包含任何 respose 主體」並不是「未包含任何資料」
for example, a search operation yielding no matches
might be implemented with this behavior.
喔沒事 我切到英文版了 當我沒說(
這篇建議用204
不過我覺得是如果想要回傳是 {} 空陣列, 那就是 200
如果要直接表示沒有要回傳的東西, 就用 204
我個人不建議204的原因是,要是客戶端一律把回傳值先拿
去parse成json,那204或200不帶訊息都會出錯
客戶一律parse json那是客戶不看使用說明的問題?
GetById和search應該是不同的操作
search operation和resource是兩回事
你可以說是客戶的問題 你也可以減少客戶的犯錯空間
什麼叫做resource,什麼叫operation上面的段落有寫
有些實作沒辦法對應成資源的,可以把這種「非資源」的作業
公開成虛擬資源,如/add?operand1=99&operand2=1
簡單說, /名詞/{id} 這種找不到應該用404
動詞?參數={value1}&參數={value2} 這種才是找不到時可以用
204的
承樓上說的,要根據 RESTful 的設計應該盡量避免 URL 帶有
動詞的操作。可以在頁面的 route 上出現 login,但呼叫後端
時,登入的操作是要獲取 resource(以這種情景通常資源會命
名為 session
更正一下,應該說作業結果是沒結果時用204,找不到還是404
這麼明確的東西我不覺得是減少客戶犯錯空間。
404 無法表達是網址錯 還是沒資源
謝謝你們,我補充了一下context
※ 編輯: yfr (42.72.84.243 臺灣), 06/22/2022 18:59:09用path parameter 的方式就回404,不是的話就用body回
空array 然後200
不懂的人去看國際標準: RFC2616。4xx開頭是 error 。2xx
開頭是 Info。
要看也是看 2014 後更新調整的 RFC7231,這個版本才把 REST
風格考慮進去,敘述中多了對表現層(representation)的解
釋
其實就在這個月出了RFC9110 XD
RFC9110 針對 Status Code 的敘述跟 RFC7231 沒有太多差異
5
4xx狀態表示你的請求本身有誤 例如404表示該資源不存在,(null)而不是空值(empty) 既然你的API本身存在,請求格式也正確 那麼如果結果為空值,該回傳2xx狀態 通常4xx都是來自於錯誤的客戶端請求2
個人拙見 鞭請小力 結論來說 原po的問題 我覺得應該是200 我的觀點偏向404屬於 該api路由、頁面不存在 github來說14
其實這都只是參考設計 怎樣處理都行 前端能接的起來就好 我個人則是傾向200或204 原因沒有什麼84
這篇就不以引述的方式回覆了,因為算是對 後續其他人不論在推文中或是回文中的內容 回覆,另外也是針對我自己在前一篇文章中 沒有提到的部分進行說明。 (1) 敘述問題與回答問題56
首Po我看有些是狀態碼200,空data 但有些又是做404,然後回個message 數據不存在之類的 這哪一種做法比較好? --33
嗯,我想兩位的建議可以寄信向 GitHub 和 Atlassian 這兩間公司說明一下,或許可以 幫他們團隊縮減人力。 當查詢資源不存在時返回 HTTP Code 404:
爆
[爆卦] 上影片(有圖)我直接來掀民進黨的網軍群看有人喊失智列車的,一直要我把金流拿出來的,我今天重點在「除非今天我內容造假、 名單造假,否則媒體人甚至總統辦公室主任都在同一個群組,裡面我貼出來的內容,特權 疫苗跟疫苗綁樁,這在台灣合法嗎?而這些人在同一個群組裡面又要說蔡英文管不到,我 也只是剛好加入這個群組,我不知道他們在說什麼嗎?」是這樣嗎?這些東西都是對的囉 ?台灣人活該第一時間打不到疫苗,被拿去綁樁是這樣嗎?剛剛家裡人說我做的是犯罪,爆
[問卦] 我是個確診者 趕快升 3 級吧過去2年台灣防疫真的做得很好 但隨著國外開始解封, 台灣的經濟紅利眼看也即將要消失 政府可能因為某些原因, 導致決定全面與病毒共存 (棄守?) 我是5月初確診, Om病毒擴散迅速, 很快我們家4口就都淪陷 但幸運的是, 我們還算是前幾波確診, 都還在區公所能處理的範圍內爆
[問卦] 我PCR陽性確診了…7年級生,打了二劑BNT,有症狀感染者 沒任何慢性病,高血壓、糖尿病 我覺得目前政府的應變能力已經跟不上確診的速度了 個人有幾項建議供大家參考 1.如果可以的話請先準備一些常備用藥(後面會再說明你就知道為什麼了),溫度計、血氧爆
[問卦] 日本客戶跟我說日本快完了今天跟客戶討論完公事之後阿,我們就開始在Line上面互相diss自己國家的現況。 我主要是跟她說反正如果哪一天我安頓好自己的家人之後,我想去日本工作, 她就說ㄟ~真的假的日本沒有你想的這麼好喔。 我就說我知道阿,但看看我在日本的姊姊,常跟我聊天時說工作上遇到什麼肚爛的事情 但是我說那妳要不要回來的時候,她又秒回我待好好的幹嘛回去。爆
[心得] 《祝卿好》全劇心得:不行欸,我get不到有圖網誌好讀版: 以下純文字版本: 我竟然看完這部劇,我真是佩服我自己 愛奇藝小編一直說這部是絕世小甜劇,我就一直看啊看啊,看到最後一集結束孩子都生了 都沒有任何一個畫面讓我覺得甜到想要在床上打滾或是土撥鼠尖叫爆
[求助] 是我的問題嗎?是不是該離開?背景說明: 結婚6年,2個小孩,3歲跟4個月,都是男寶 無後援,雙薪家庭 我跟先生是第一代移民,除了我們跟兩個小孩外,所有家人都在台灣。 我是職業婦女,固定一到五上班,每天接送小孩再加回家大概1-1.5小時車程。(8點出門爆
[心情] 成功get到了, 謝謝大家!前幾天曾來板上詢問若約會半年都還沒交往,有沒有方法讓男方主動? 回覆我的所有鄉民都說要由我主動,有的暖心 、有的直接,我都有收到和參考,後來因討論串比預期多不少,想低調些因此刪文 補後續 鼓起勇氣問對方“我們是什麼關係?”,成功get到了 他說也一直在想要怎麼問我65
[討論] 我也確診了..覺得我是巨嬰的就不用看下去了,看了也是傷你眼睛 是的!身為密切接觸者的我也確診了, 老婆是昨天早上快篩陽的,在家吃普拿疼一天,預約了今天早上的 北士科快篩站,而我,今天早上因為有了鼻塞 畏寒跟咳的症狀 結果一捅下去,快篩陽,立碼上網看看新北市的快篩站還沒有可以預約35
[求助] 是我的問題嗎?跟男友交往半年多 我24 在工作了 男友22 大學生 事情就發生在剛剛 今天上班很累