我正在開發REST服務,並且我試圖遵守Roy Fielding醫生的約定和指導原則。REST資源路徑設計
我將我的服務描述爲暴露一組資源的端點。資源由URI標識,並且api客戶端可以使用HTTP語義操作資源(即,不同的HTTP動詞映射到通過URI的相應操作)。
準則指出這些URI應該以分層方式定義,反映對象層次結構。這對於創建資源非常有用,因爲在後端我們需要數據來執行創建操作。但是,在進一步的操作中,URI中包含的許多信息甚至不會被服務使用,因爲通常資源Id本身足以唯一地標識操作目標。
示例:考慮一個暴露產品創建和管理的Api。還要考慮到產品與品牌相關聯。上創建它是有道理的,執行以下動作: HTTP POST /品牌/ {brand_id} /產品
創建返回與創建一個HTTP 201 [含有必要輸入到創作產品的機構]位置標題,顯示新創建的產品的位置。
在進一步的操作,客戶端可以通過做訪問產品: HTTP PUT /品牌/ {brand_id} /產品/ {PRODUCT_ID} HTTP DELETE /品牌/ {brand_id} /產品/ {PRODUCT_ID} 等
但是,由於產品ID在產品範圍內是通用的,因此可以按如下方式執行以下操作: /Product/{product_id} 爲保持一致性原因,我只保留/ Brand/{brand_id}前綴。事實上,品牌ID正被服務忽略。你是否認爲這是一種良好的做法,並且爲了保持清晰明確的ServiceInterface定義而合理?這樣做的好處是什麼,這是一種什麼樣的方式?
此外,任何關於URI定義最佳實踐的指針將不勝感激。
在此先感謝
看起來你的建議是:保持你的資源路徑簡單,並在每個資源成員中包含鏈接。 你只處理Get情況。你會如何創建一個新產品?也就是說,你會在創作時指出哪些製造商與新產品有關?將其包含在請求正文中?這聽起來不對。聽起來像這樣的信息將被包含在資源URI中 –
鏈接將被包括在請求主體中,因爲那是該資源的表示。您必須對請求主體執行適當的檢查,以確保製造商和品牌確實存在。 –