我正在構建一個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