2014-10-27 125 views
0

我有這個IP地址的數據管理面板,它屬於組織並且有用戶對它負責。REST API資源依賴關係

現在我有路線/api/ip/api/ip/{id}以獲得所有或特定的IP。一個資源的格式爲:

{ 
    "ip": "200.0.0.0", 
    "mask": 32, 
    "broadcast": "200.0.0.1" 
} 

現在,當我選擇了IP,我想顯示IP信息,也是該組織的信息屬於和用戶,這是負責的,在一個頁面信息。

是好主意,返回下面的數據格式,同時要求/api/ip/{id}

{ 
    "ip": "200.0.0.0", 
    "mask": 32, 
    "broadcast": "200.0.0.1", 
    "organization": { /* organization data */ }, 
    "users": { /* users information */ } 
} 

這樣,我得到我需要在一個請求的所有信息,但它仍然REST風格的API?

或者我應該製作2個更多的API路線,如/api/ip/{id}/organization/api/ip/{id}/users ,並在3個單獨的請求中獲取我需要的所有數據?

如果不是,那麼這樣做的適當方法是什麼?

回答

0

我會做最後一個,使用Hateoas,它允許您鏈接資源。對於那個叫做BazingaHateoasBundle的包來說真的很棒。那麼結果會是這樣的:

/api/ip/127.0.0.1

{ 
    "ip": "200.0.0.0", 
    "mask": 32, 
    "broadcast": "200.0.0.1", 
    "_links": { 
     "organization": "/api/ip/127.0.0.1/organization", 
     "users": "/api/ip/127.0.0.1/users" 
    } 
} 
0

這是完全沒有問題有嵌套的資源。您可以按照展示方式展開它們,也可以通過添加鏈接(使用正確的鏈接關係或RDF元數據)來摺疊它們。我建議您使用標準或至少文檔化的超媒體類型,例如JSON-LD + Hydra或HAL + JSON。