如何为分层实体设计RESTful API

时间:2015-10-08 19:14:17

标签: api rest

我正在为文件存储设计RESTful API,并且无法找到将URL组织到操作的最佳方法。

文件可以分组到文件夹,但需要能够获取所有文件。 指南建议使用以下URL来获取特定文件夹的文件。

GET /folders/{folderName}/files

但应该用什么来获取所有文件? GET /filesGET /folders/files

此外,Google云端硬盘具有一些类似的功能,他们使用不同的方法

GET files/{folderName}/children

1 个答案:

答案 0 :(得分:2)

正如您所注意到的,这可以从一个API设计师到另一个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使用者没有多大意义。