2012-01-12 113 views
2

我正在編寫一個REST API,我想要一些反饋。 我將有一個名爲Items的資源。我希望它被公開訪問,或者它可以被私有化(只有用戶可以看到它)。我的第一個想法是將一個公共項目的URL放入公共項目中,例如 /Root /項目將存放公共項目,以及其他URL,如/ Root/User/Items,其中私人項目將存在。一個項目可以鏈接到另一個用戶,因此它有權更新它。就像/ Root/User/Operator/Items ....但後來我意識到我創建了太多的地址。REST API設計

我不喜歡將所有項目放在de/Root/Items url中的想法,因爲每個用戶都會有不同的輸出。只將它放在/ Root/user/Items中將不可能列出所有公共項目(可以屬於任何用戶)。

任何想法如何設計?

+0

你需要一個控制器,mod_rewrite和認證 – Teson 2012-01-12 21:30:51

+0

user247245不明白這個問題。 – Evert 2012-01-12 21:32:09

+1

使用'/ items'返回的內容取決於哪個用戶訪問它有什麼問題?這是動態內容的美妙之處。用戶只會看到他們有權查看的項目的鏈接。這是一個經典的概念。 – tuespetre 2012-09-16 04:29:45

回答

0

在RESTful體系結構中,如果您按照我的預期使用HTTP,那麼每個「事物」都應該有一個標識符,它是一個URI。在你的情況下,每個項目應該只有一個URI。

我的第一個想法是將公共項目的公共項目(例如/ Root/Items)和其他URL(如/ Root/User/Items)放置在私有項目所在的位置。

我認爲你不僅僅在談論收集資源,它將返回一個項目集合。我假設你也有單項資源。在您的方案中,單個項目的URI可以是/ Root/Items/42或/ Root/User/Items/23。

如果公共和私人項目可以幫助您執行所需的授權,則可以使用不同的URI方案。但無論如何,URI在REST中並不重要。應始終將URI視爲不透明。如果您對公共和私人物品使用不同的方案,則必須確保公共物品永遠不會變得私密,反之亦然。如果是這樣的話,一個項目的URI將會改變,就像你會改變數據庫中一行的主鍵一樣。標識符不應該改變。如果您對公共和私人項目使用不同的URI方案,您正在執行的操作是將項目的隱私級別編碼到那裏的標識符中。如果你的問題域允許這樣做,那就OK了。

一個項目可以鏈接到另一個用戶,所以它將有權限更新它。就像/ Root/User/Operator/Items ....但後來我意識到我創建了太多的地址。

這聽起來像你想改變項目的隱私級別。正如我之前所說的,一個項目應該有一個永不改變的URI。如果你正在談論收集資源,你的計劃可能是。我不確定你在這裏的意思。

最後:您需要的是身份驗證和授權。如果用戶想要訪問另一個用戶的私人項目而不管其URI是否需要返回403 Forbidden。