我很新,API實現從頭開始,我需要一些關於API結構中標準或最佳方法的建議。嵌套路由器vs過濾器
目前我實現包括嵌套路由器(DRF-嵌套路由器包),如
「www.thissite.com/store/21/products/1/」
現在我挖更深Django的,我發現,有過濾器,讓我做以上完全相同的操作,像這樣
「www.thissite.com/products/?store__id=21 & ID = 1」
少一點代碼我的問題是哪一個是最佳實踐,爲什麼?
我很新,API實現從頭開始,我需要一些關於API結構中標準或最佳方法的建議。嵌套路由器vs過濾器
目前我實現包括嵌套路由器(DRF-嵌套路由器包),如
「www.thissite.com/store/21/products/1/」
現在我挖更深Django的,我發現,有過濾器,讓我做以上完全相同的操作,像這樣
「www.thissite.com/products/?store__id=21 & ID = 1」
少一點代碼我的問題是哪一個是最佳實踐,爲什麼?
如果一個產品總是與一個商店有關(這似乎是這種情況,給定名稱),那麼對於REST來說,通過使products
成爲stores
的子資源來維護分層結構被認爲是最佳實踐。因此,我建議你遵循上述第一種方法。
過濾應該用於基於某些內部特徵(例如類屬性)過濾資源,而不是基於與其他資源的關係。
這兩個都是最佳實踐,因爲REST不會限制URI設計。我打電話給www.thissite.com/store/21/products/1/
分層URI設計和www.thissite.com/products/?store__id=21&id=1
平URI設計。我更喜歡平面設計,但這只是我個人的品味。如果您同時需要store-id
和product-id
以識別產品,那麼這些URI是可以接受的,並且任何URI都可以使用這些變量,例如x/y/z/:pid/q/r/s/:sid
等等。通過REST創建URI(模板)是服務的職責並且客戶端僅使用超鏈接形式的服務獲得的URI。所以從REST客戶端的角度來看,URI結構並不重要。我們傾向於設計好的URI,只是爲了保持REST服務路由邏輯清晰。
謝謝,我會這樣做:) –