2014-10-17 58 views
4

說我有以下兩個根資源:REST - 如何關係,與關係數據模型

.../organizations 
.../persons 

一個GET.../organizations/id回報所有關於特定組織的信息,如名稱,位置等

一個GET.../persons/id回報所有關於特定人的有關信息,如姓名,年齡,性別等

什麼是首選RESTful的方式向會員模型組織中某人的臀部(用於檢索和創建)?我不只是想給會員本身的模式,但也添加額外的屬性,如該人在該組織加入了該組織,他/她的角色之日起,...

的幾點思考:

  • 如果我們提供.../organizations/id/persons/idGET應該返回什麼?只有會員資料(加入資料,角色,...)和.../persons/id的鏈接? REST API用戶可以使用鏈接來獲取關於該人的所有信息。

  • 難道我們要.../persons提供了可能性POST創建人,創建成員另一/獨立POST.../organizations/id/persons

  • 進一步說,一個人必須永遠是至少一個組織的成員。在這種情況下,我們需要一個POST以同時原子創建人員和成員資格。

    我們如何建模?優選地,我想保留根資源.../organizations.../projects。在.../organizations/id/persons上創建一個人是沒有意義的,但在.../persons/上創建成員資格也沒有意義。

+0

相當有點重複在這裏,我想... * http://stackoverflow.com/questions/26429924/rest-relation-context * http://stackoverflow.com/questions/26427115/rest-relations -and-etag – 2014-10-21 17:26:10

回答

3

不會使用HAL並且其簡單格式滿足您的需求?

假設我們已經爲個人,組織定義的資源和成員 ,我們正試圖獲取有關通過「42」標識的人的信息。

請求:

GET /persons/42 HTTP/1.1 
Accept: application/hal+json 

響應:

HTTP1.1 200 OK 
Content-Type: application/hal+json 
{ 
    "id": 42, 
    "name": "Smith", 
    "firstName": "John", 

    "organization": { 
     "id": 1234, 
     "name": "blah", 
     "href": "http://myserver/organizations/1234" 
    }, 

    "membership": { 
     "id": 5678, 
     "name": "blih", 
     "href": "http://myserver/memberships/5678" 
    }, 

    "_links": { 
     "self" : { 
      "href" : "http://myserver/persons/42" 
     } 
    } 
} 

的人的資源是指上級組織通過 「組織」 關係。該關係使您可以通過相應的href鏈接輕鬆導航到相應的組織 資源。

以同樣的方式,隸屬關係,允許(通過的「href」鏈接再次)訪問相應 成員的數據,如果考慮到會員 同夥一人一個組織。

請求:

GET /memberships/5678 HTTP/1.1 
Accept: application/hal+json 

響應:

HTTP1.1 200 OK 
Content-Type: application/hal+json 
{ 
    "id": 5678, 
    "name": "blih", 

    "person": { 
     "id": 42, 
     "href": "http://myserver/persons/42" 
    }, 

    "organization": { 
     "id": 1234, 
     "href": "http://myserver/organizations/1234" 
    }, 

    "_links": { 
     "self": { 
      "href": "http://myserver/memberships/5678" 
     } 
    } 
} 

請注意,我不是說,上面的modelisation是您 需求(一個人大概可以屬於多個正確的例如組織,然後您需要序列化中的數組)。

我的觀點是,使用HAL可能會幫助你模型化你想要的。

+0

非常有趣。稍後我會詳細介紹一下。謝謝。 – 2014-10-17 13:52:39

+0

非常有趣!我仍然不確定我是否需要單獨的「會員資格」資源。我爲此添加了另一個問題:http://stackoverflow.com/questions/26429924/rest-relation-context。 – 2014-10-17 17:04:44

+0

沒有真正回答這個問題,但它是一個很好的信息來源,寫得很好。 HAL對於只讀API更有用,因此如果要進行大量狀態轉移,請查看Siren或Collection-JSON。 – bitoiu 2014-10-20 15:30:41

-1

實際上,完美的RESTful API設計是無法訪問的。我從來沒有見過一個滿足Roy Fielding所制定的所有REST API論文的系統。但是,通過遵循最佳實踐,您可以提高從項目到項目的其餘api設計的技能。 第一次看這article

+0

很好的建議,但它不回答問題 – 2014-10-17 09:47:18

+0

感謝您的鏈接,我當然會看看。雖然它不回答我的問題,但讚賞反饋。 – 2014-10-17 09:49:38

+0

如果接近主題: – hellraiser 2014-10-17 09:54:54

0

想象一個資源可以獨立存在而不依賴於另一個對象的對象。這只是一個指導方針,你可以看到它的工作方式是projectsorganizations

我看到它的方式一個membership應該是獨立的資源,因爲資源person已被刪除後,甚至有可能存在的,歷史的目的,例如。

在這個模型中我將創建一個資源/memberships,因爲它不是一個personorganization,將提示您添加爲personorganization子資源的屬性。

我不確定我是否同意@hellraiser,即使通過Roy的標準,完美也很難定義。我通常會嘗試達到Fowler所述的更高級別的REST:http://martinfowler.com/articles/richardsonMaturityModel.html

+0

單獨的會員資源確實有意義。但是關於一個人必須是至少一個組織成員的要求呢?我們在哪裏「發佈」呢?我們同時創建兩個獨立的資源(人員和成員資格)。我們最好自己做這件事,以避免孤兒。 – 2014-10-17 09:58:34

+0

如果沒有與其關聯的人作爲子資源,成員身份就不存在。 – bitoiu 2014-10-17 10:08:28

+0

並且發佈一個內部創建人員和成員資格的人員是有意義的。這將是你的第二點。 – bitoiu 2014-10-17 10:09:59