我正在设计一个 RESTful API ,用于处理(以及其他)管理目录和文件。
由于一些棘手的业务规则(如下所列),我在寻找良好的资源结构和良好的URI设计方面遇到了一些麻烦......
这是一个可能的URI设计:
获取所有目录:
GET / api /目录
获取目录的属性:
GET / api / directories / {directoryId}
获取目录中的文件:
GET / api / directories / {directoryId} / files
获取文件:
GET / api / files / {fileId}
删除文件:
DELETE / api / files / {fileId}
创建文件:
POST / api / files
这是一个尴尬的设计吗?如果是,为什么?
此外,如果要记录此 RESTful API ,这也有点尴尬:
目录资源
资源URI:
/ API /目录
可能的操作:
与其他资源的链接:
(?)如何写这个?
有一个指向文件资源的链接,但只有在使用第二个操作时才能访问该链接。
文件资源
资源URI:
(?)...有两个URI ...一个用于"得到全部" ("或得到许多")和其余的操作。
可能的操作:
与其他资源的链接:
链接到目录资源 - 请注意单数(?)
严格来说,没有目录资源,但有一个目录 - 我应该单独处理这两个(目录VS目录)吗?请在最后看到问题。
此外,此链接仅在前两个操作中可用...如何在指定时更精确?
此外,我发现一些RESTful API文档具有集合类资源和实例/元素类似资源的单独条目(例如,见this) 这样的粒度文档是否更可取?我想一个优势就是"链接到其他资源" (或"相关资源")文档部分会更精确。或者我错了吗?
任何想法都表示赞赏! 谢谢:))
答案 0 :(得分:1)
我不会说你拥有的东西特别尴尬。如果是我,我会支持这些网址:
GET /directories
GET /directories/{directoryId} // includes a link to the files in the directory, such as /files?directoryId={directoryId}
GET /directories/{directoryId}?expand=files // includes a child collection with links to each individual file resource, and possibly other metadata as well
GET /files
GET /files?directoryId={directoryId}
POST /files
GET /files/{fileId}
DELETE /files/{fileId}
{p> /directories/{directoryId}/files
范例很常见,但不是我最喜欢的范例。如果用户想要目录的文件,他们可以使用/files
上的查询参数。如果他们希望文件与目录同时存在,则可以使用/directories/{directoryId}
上的查询参数。
这当然都是主观的。如果不知道所有细节,没有人能够给你一个正确的答案。
就文档而言,没有硬性和快速的结构。如果您不喜欢自己拥有的东西,请更改它以避免尴尬。此外,您有多个目录实例。从/directories/{directoryId}
返回的每个资源都是目录。