2013-07-01 121 views
0

我試圖用依賴關係設計兩個不同資源之間的關係。場景是:REST:鏈接資源與依賴關係

兩個資源,第一個叫做「account」,第二個叫做「person」。

在我的API中,「人物」資源是真實世界中具有姓名,年齡,性別,地址,電話等等的人的代表。帳戶是負責認證人員的資源,例如登錄。

所以,「人」的資源的表示看起來象下面這樣:

{ 
    "id": "7828292", 
    "name": "Joseph Climber", 
    "email": "[email protected]", 
    "gender": "M", 
    "telephones": { 
     "main": { 
      "number": "898987777" 
     }, 
     "secondary": { 
      "number": "909099090" 
     }, 
     "business": { 
      "number": "937363902" 
     } 
    }, 
    "address": { 
         "rel": "address", 
         "href": "person/{ID}/address" 
     } 
} 

和「帳戶」資源的表述是這樣的:

{ 
    "id": "[email protected]", 
    "tokenAccess": "5E69FAE25F4B4F3E8CC5DE09A8163520", 
    "link": { 
     "rel": "person", 
     "href": "person/{id}" 
    } 
} 

我的問題是:當我創建一個新的人(POST人)我沒有辦法驗證新人,在這種情況下,創建一個新帳戶來完成此操作是必要的,所以這對於API消費者來說似乎有點混亂,因爲API不會自然表達這種關係(一個好的API設計的基本概念)。

在賬戶和人員資源之間表示這種依賴關係的最佳方式是什麼?

+0

你是什麼意思「認證新人」?你在談論API消費者嗎? – Botis

回答

0

也許如果有人試圖POST/person沒有一個訪問令牌,然後返回一個狀態代碼401 Unauthorized用身體是這樣的:

{ 
    "@type": "error", 
    "description": "You must be authenticated to POST to person. If you do not have an account, then POST to /account to get an access token." 
} 

我想這將是直觀足夠使用API​​的開發。

+0

嗨,謝謝你的回答,但我認爲這樣API仍然困惑。 例如,我有另一個問題:如果創建兩者的過程不同,我如何將帳戶關聯到某個人(反之亦然)? – Krock

+0

您能否詳細說明您感到困惑?如果我打電話給'/ person',並返回錯誤信息'您必須先打電話給/ account',我不會覺得困惑 - 它告訴我該怎麼做。這是因爲用戶在撥打電話之前不知道其依賴性?如果是這樣,也許你把東西放在你的API文檔中。 [Swagger](http://petstore.swagger.wordnik.com/)針對每個API調用都有一個免費的文本部分,您可以在其中向用戶解釋這樣的內容。 – theon