提前抱歉問「什麼是將某些功能操作塞進REST式思維方式的最佳方式」問題。這裏無意展開辯論;我想看看是否有一個可接受的模式來完成特定任務。如何在RESTful服務中實現「查找或創建」操作?
假設我想在API中爲端點創建用戶/關聯對的「推薦代碼」。我可以做
POST /referral_codes
{"user":1, "affiliate":88}
並使用201 CREATED和一個新代碼的身體作出響應。
但是,如果代碼已存在,我會退還現有的推薦代碼。在這種情況下,201是不合適的(沒有創建任何東西)。 200 OK可能是有道理的,409 CONFLICT是有意義的,如果你極大地延伸了409的意圖 - 但要求一個已經存在的代碼並不是一個錯誤,我試圖模仿的操作被稱爲「查找或創建」。
另一種選擇是使端點成爲GET(即GET /referral_codes?customer=1&affiliate=88
),因爲客戶端不需要知道服務器是否必須創建資源來完成請求。而且由於它仍然是冪等的(隨後的調用將返回第一次創建的代碼),我沒有做任何一個Restafarian會反對的東西,或者我會做什麼?
是否存在「查找或創建」的接受模式?
查找通常是GET並且創建通常是POST,因此您不會以REST方式對此操作進行建模。我會把它分成2個請求,或者給操作提供一個更好的名字...... 正如Will寫道,POST是你唯一的選擇,因爲afaik是用於你將用新的HTTP方法建模的操作。 – inf3rno