2015-10-08 71 views
2

我正在設計用於文件存儲的RESTful API,並且在查找將URL組織到操作中的最佳方法時遇到問題。如何設計用於分層實體的RESTful API

文件可以分組到文件夾,但需要能夠獲取所有文件。 準則建議使用以下URL來獲取特定文件夾的文件。

GET /folders/{folderName}/files

但應該使用什麼是拿到所有的文件嗎? GET /filesGET /folders/files

也是谷歌驅動器有幾分相似的功能和他們使用diifferent方法

GET files/{folderName}/children

+0

如果瀏覽'/ folders/{folderName}',你會得到什麼?在我看來,'文件'可能會在所有網址中被刪除,但我可能是錯誤的 –

+0

好點,我沒有考慮它。但是,再次,應該做什麼來獲取所有文件,無論文件夾(我有這樣的要求) –

+0

在這種情況下。我會使用'/ folders /'。理論上,該端點只應該返回根文件夾,但您可以使用查詢字符串參數來擴展對整個樹的響應。不是100%休息,但不認爲讓1000個服務器調用來獲得完整的樹是非常實用的 –

回答

2

正如你已經注意到了這個範圍可以從一個API設計師到另一個。

如果我遇到了這個問題,我想考慮所有用例,並找出最好的方法。

它看起來像下面會滿足您的需求:

GET/         Retrieves all files and folders 
GET /{folderId}       Retrieves all contents of said folderId (folders and files) 
GET /{fileId}       Retrieves the file 
GET /{folderId}/{folderId}    Same as above, but for nested folder 
GET /{folderId}/{folderId}/{fileId}  Retrieves the file 

這種模式可以繼續但嵌套在文件結構(注意,是對URL長度的限制)

然後,如果你有一個獨特的需求,比如你只需要創建一個新的API端點。

GET /files/        Retrieves all files 
GET /files/?filter="*.txt"    Retrieves all text files 

所以回答您的具體問題:

但應該使用什麼是拿到所有的文件嗎? GET /文件或GET /文件夾/文件

我會傾向/ files而不是/ folders/files。/folders/files作爲api消費者沒有多大意義。