雖然我不是微軟派的,但是不得不說他們文件寫得真是認真
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
: 我看有些是狀態碼200,空data
: 但有些又是做404,然後回個message 數據不存在之類的
: 這哪一種做法比較好?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.229.68.76 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1655882271.A.1E5.html→ ssccg1樓你貼的這篇就建議404啊 06/22 15:28
x51811danny2樓找不到資源!=沒資料 06/22 16:01
xup6y3ru043樓這篇是說要回傳204 06/22 16:17
s06yji34樓用ID Get的時候找不到資源的情況是404吧 06/22 16:25
→ 本人5樓大家熱烈討論還蠻棒的,資源不存在跟沒有結果是細微的不同 06/22 16:30
smalldra6樓原來正解是204 ... 06/22 16:36
→ crazycy7樓照這篇就是要404阿... 06/22 17:01
→ crazycy8樓資源不存在不就是找不到資料(e.g.資料庫沒這筆資料) 06/22 17:02
→ crazycy9樓204是指說找到這筆資料,但是內容是空的 06/22 17:03
Romulus10樓這篇並不是說要回傳204 06/22 17:03
→ Romulus11樓「未包含任何 respose 主體」並不是「未包含任何資料」 06/22 17:03
→ iterator12樓for example, a search operation yielding no matches 06/22 17:04
→ iterator13樓might be implemented with this behavior. 06/22 17:04
→ Romulus14樓喔沒事 我切到英文版了 當我沒說( 06/22 17:05
→ Romulus15樓這篇建議用204 06/22 17:05
→ iterator16樓不過我覺得是如果想要回傳是 {} 空陣列, 那就是 200 06/22 17:05
→ iterator17樓如果要直接表示沒有要回傳的東西, 就用 204 06/22 17:06
→ Romulus18樓我個人不建議204的原因是,要是客戶端一律把回傳值先拿 06/22 17:07
→ Romulus19樓去parse成json,那204或200不帶訊息都會出錯 06/22 17:07
s06yji320樓客戶一律parse json那是客戶不看使用說明的問題? 06/22 17:11
s06yji321樓GetById和search應該是不同的操作 06/22 17:12
→ ssccg22樓search operation和resource是兩回事 06/22 17:15
Romulus23樓你可以說是客戶的問題 你也可以減少客戶的犯錯空間 06/22 17:17
→ ssccg24樓什麼叫做resource,什麼叫operation上面的段落有寫 06/22 17:17
→ ssccg25樓有些實作沒辦法對應成資源的,可以把這種「非資源」的作業 06/22 17:21
→ ssccg26樓公開成虛擬資源,如/add?operand1=99&operand2=1 06/22 17:21
→ ssccg27樓簡單說, /名詞/{id} 這種找不到應該用404 06/22 17:22
→ ssccg28樓動詞?參數={value1}&參數={value2} 這種才是找不到時可以用 06/22 17:22
→ ssccg29樓204的 06/22 17:23
Hsins30樓承樓上說的,要根據 RESTful 的設計應該盡量避免 URL 帶有 06/22 17:25