2016-02-29 70 views
1

我正在設計新API的過程中,並試圖儘可能簡化它。對於預期的系統,大多數API消費者將單獨引用屬於它們的對象,但是一些其他帳戶將在其他人帳戶中「擁有」對象。問題在於賬戶是否成爲這些特殊超級賬戶的必要組成部分或可選的包含。REST API可選路徑元素

下面是一個例子規範,並在單用戶環境(帳戶ID「basic1」)正常工作:但是

# return person "s4t4s2" for account "basic1" 
GET /v1/person/s4t4s2 
# return team "g3a35a" for account "basic1" 
GET /v1/team/g3a35a 

因爲他們有自己的對象,其中上述執行工作的超級賬戶,他們也需要訪問他們有效地擁有(帳戶ID「super1」)帳戶的屬性:

# return person "s4t4s2" for account "super1" 
GET /v1/person/s4t4s2 
# get team "g399a2" for account "super1" 
GET /v1/team/g399a2 
# return person "s4t4s2" for account "basic1" 
GET /v1/accounts/basic1/person/s4t4s2 

因爲我的大部分消費者將處理單一賬戶的看法是它使用第二格式爲所有帳戶的最佳實踐或者它完全有效當帳戶被省略時,通過認證憑證使用兩種格式都可以自動進行範圍驗證?

回答

1

如果我理解正確,那些是相同的「人」資源,但他們有多個URI?我可能會希望有一個資源的單個實例的URI。即使它有不同的「觀點」。不同的觀點仍然可以通過具有不同的media-types或者根據用戶的權限在相同的media-type上以不同的方式填寫字段來解決。

單個實例擁有單個URI的好處是可以將其加入書籤,緩存等。例如,如果用戶的團隊/帳戶視圖發生更改,它將無法重用其與個人的鏈接,因爲URI發生更改。我認爲這不是一個好設計。

如果我的理解錯誤,並且/v1/accounts/basic1/person/s4t4s2/v1/person/s4t4s2不是同一個人,則忽略我的評論。 :)

+0

嗨羅伯特,謝謝你的時間。你是正確的,這些URI是指同一個用戶。如果我正確理解了你的評論,我相信你在說使用隱含的帳號ID路徑實際上對任何人都沒有好處,因爲它破壞了通用性。從本質上講,一個人總是屬於一個賬戶,所以我們應該在道路上明確這一點。您對「媒體類型」的提及只是表明此決定不會影響我們能夠迴應的內容類型?如果沒有,請讓我知道如果我失去了一些有用的東西:)再次感謝 – puppyFlo

+0

我不知道你的用例和域的細節,但我會認爲一個「人」存在獨立的帳戶。一個人可以切換帳戶嗎?或有多個帳戶?換句話說,賬戶是否真的是某人的身份*的一部分?我認爲在大多數情況下它不是,因此它不應該是URI的一部分。 –

+0

啊,我看到,它更多的是經銷商類型的情況 - 大多數賬戶不是經銷商,但是如果有意義的話,那些可以控制其他賬戶的經銷商。一個人只能存在於一個賬戶中。 – puppyFlo