我正在构建一个REST API,并且我有一些关系使得我的链接非常长。它们对我来说很有意义,但它是一团糟。我不知道处理这个问题的最好方法是什么。有这么长的链接有问题吗?我是否违反了这些原则?我应该如何处理这样的关系?在REST API中处理非常深的关系
下面的例子是有点人为的,但它说明了我想要做的。
一个公司有许多部门。每个部门有很多雇员。每个雇员可以有许多计算机。每个计算机可以有很多文件就可以了。
到GET
的路径特定的文档将是:
/companies/:companyId/departments/:departmentId/employees/:employeeId/computers/:computerId/documents/:documentId
每个ID是该层内的全局唯一 - 没有两个文档ID将是在整个系统中的相同,但一个文件ID可以是与员工ID相同。
这对我来说很有意义,因为每一层只与上面的一件事有关。一个部门将只属于一个公司,一个员工只属于一个部门,一部电脑只属于一个员工,而一个文件只属于一部电脑。
我可以将它们分解为单独的端点,例如/computers
,但是我怎么知道在哪里破坏它们?为什么我会选择/computers
作为端点,而不是/employees/:employeeId/computers
?
**是全球唯一的** documentId **吗? – JonSG
@JonSG是的,它在所有文档ID中都是唯一的。我编辑了这个问题来澄清。 – vaindil
我的意见在这里,但我觉得没有必要在API中表示它们的层次结构。你在一个例子中说明的那个,但可能有很多其他的。我觉得你的API应该简化为**/document/[id] **。同样,如果employeeid是全球唯一的,那么** employee/[id] **。为什么让消费者知道员工和部门是否想知道具有已知ID的文件内容?另一方面,初始投贴是一个不同的问题,因此可能需要层次结构。是否需要支持“完整”动词集,或者获得足够的? – JonSG