wcf:rest_REST:管理多对多关系
wcf:rest
介紹
管理多個資源之間的關系可能是RESTful API的重要組成部分。 在這篇文章中,我們將看到使用REST API可以管理多對多關系。
我們以一個簡單的用戶 / 組關系為例。 假設用戶和組是兩個單獨的資源(例如/ users和/ groups ),并且我們希望提供一種方法來管理以下幾點所描述的關系:
- 可以將一個用戶添加到多個組
- 一個組可以包含多個用戶
- 用戶只能添加一次到組
多對多關系可以分為兩種不同的類型:
- 除實際關系外,沒有其他信息的關系
- 包含其他數據的關系。 在我們的例子中可以像一組成員狀態(例如, 用戶是在一個組主持人和一個簡單的成員在另一組 )
在本文中,我們將只討論第一種類型的關系。 與其他數據的關系將在以后的文章中介紹。
當然,沒有單個正確的解決方案可以解決此問題。 下一節將介紹我獲得最佳經驗的方法。 之后,我們將介紹一些替代解決方案。
建模子資源和GET操作
首先,我們介紹兩個子資源:
- / users / <用戶ID> / groups代表分配給ID為<用戶ID>的用戶的組
- / groups / <group-id> / users代表分配給ID為<group-id>的組的用戶
現在,使用GET動詞可以請求兩個集合。
將用戶分配到特定組:
GET /groups/<group-id>/users獲取分配給特定用戶的組:
GET /users/<user-id>/groups添加和刪??除用戶
現在,我們需要一種將用戶添加到組的方法。 我們使用PUT動詞執行此操作。
將用戶添加到組:
PUT /groups/<group-id>/users/<user-id>此操作不需要請求正文。
例如,這將用戶32添加到組21中 :
PUT /groups/ 21 /users/ 32請注意,在這里我們需要問一個問題:是否將用戶添加到組是冪等的。 在我們的示例中,該操作是冪等的:用戶只能添加一次到組中。 因此,我們使用PUT動詞。 如果分配操作不是冪等的(例如,可以將一個用戶多次添加到一個組中),我們必須使用POST而不是PUT。
在我的其他文章中,您可以閱讀有關冪等性以及POST和PUT之間的區別的更多信息。
或者,我們也可以根據需要從/ users角度對該操作進行建模。
向用戶添加組:
PUT /users/<user-id>/groups/<group-id>要從組中刪除用戶,我們使用DELETE動詞。
從組中刪除用戶:
DELETE /groups/<group-id>/users/<user-id>例如,這將用戶32從組21中刪除:
DELETE /groups/ 21 /users/ 32反之亦然,從/ users一側開始:
從用戶刪除組:
DELETE /users/<user-id>/groups/<group-id>請注意,盡管我們在/ groups / <group-id> / users / <user-id>上執行PUT和DELETE操作,但無需為此URI實現GET。 GET / groups / 21 / users / 32只會返回與GET / users / 32相同的結果(只要用戶是給定組的一部分)
替代解決方案
引入單獨的
另一種方法是創建一個完全獨立的資源來管理用戶和組之間的關系。
將用戶添加到組可能如下所示:
POST /group-members { groupId: 31 , userId: 23 }為了將用戶分配到給定的組 ,我們可以使用與先前解決方案類似的請求:
GET /groups/<group-id>/members但是,這一次它將返回一個組成員資源列表。
這種方法增加了一些復雜性(我們添加了一個可能具有其自身標識符的全新資源)。 但是,如果我們想向關系中添加一些其他信息(例如, 用戶的加入日期 ),則該功能特別有用。 在以后的文章中,我們將詳細研究與其他數據之間的關系。
作為正常資源更新的一部分管理關系
另一種方法是使用標準更新操作來管理關系。 例如:
PUT /users/ 23 { "name" : "John" , "groups" : [ { "id" : "42" }, { "id" : "43" } ] }盡管這在某些情況下可以正常工作,但我不推薦這種方法。
資源和關系經常相互獨立地進行更改。 將兩個操作合并在一起可能會導致各種問題。 例如,從安全角度來看,兩個操作可能需要不同的權限。 客戶端可能被允許將用戶添加到組中,但可能沒有更新用戶本身的權限。
由于存在很多關系,因此這種方法的性能也非常麻煩。 因此,通常最好提供單獨的操作來更新資源和關系。
翻譯自: https://www.javacodegeeks.com/2020/06/rest-managing-many-to-many-relations.html
wcf:rest
總結
以上是生活随笔為你收集整理的wcf:rest_REST:管理多对多关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: neo4j 迁移_在Kubernetes
- 下一篇: 正在消失的光驱光驱不见了如何恢复