日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

wcf:rest_REST:管理多对多关系

發(fā)布時(shí)間:2023/12/3 86 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wcf:rest_REST:管理多对多关系 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

wcf:rest

介紹

管理多個(gè)資源之間的關(guān)系可能是RESTful API的重要組成部分。 在這篇文章中,我們將看到使用REST API可以管理多對(duì)多關(guān)系。

我們以一個(gè)簡(jiǎn)單的用戶 / 組關(guān)系為例。 假設(shè)用戶和組是兩個(gè)單獨(dú)的資源(例如/ users和/ groups ),并且我們希望提供一種方法來(lái)管理以下幾點(diǎn)所描述的關(guān)系:

  • 可以將一個(gè)用戶添加到多個(gè)組
  • 一個(gè)組可以包含多個(gè)用戶
  • 用戶只能添加一次到組

多對(duì)多關(guān)系可以分為兩種不同的類型:

  • 除實(shí)際關(guān)系外,沒(méi)有其他信息的關(guān)系
  • 包含其他數(shù)據(jù)的關(guān)系。 在我們的例子中可以像一組成員狀態(tài)(例如, 用戶是在一個(gè)組主持人和一個(gè)簡(jiǎn)單的成員在另一組 )

在本文中,我們將只討論第一種類型的關(guān)系。 與其他數(shù)據(jù)的關(guān)系將在以后的文章中介紹。

當(dāng)然,沒(méi)有單個(gè)正確的解決方案可以解決此問(wèn)題。 下一節(jié)將介紹我獲得最佳經(jīng)驗(yàn)的方法。 之后,我們將介紹一些替代解決方案。

建模子資源和GET操作

首先,我們介紹兩個(gè)子資源:

  • / users / <用戶ID> / groups代表分配給ID為<用戶ID>的用戶的組
  • / groups / <group-id> / users代表分配給ID為<group-id>的組的用戶

現(xiàn)在,使用GET動(dòng)詞可以請(qǐng)求兩個(gè)集合。

將用戶分配到特定組:

GET /groups/<group-id>/users

獲取分配給特定用戶的組:

GET /users/<user-id>/groups

添加和刪??除用戶

現(xiàn)在,我們需要一種將用戶添加到組的方法。 我們使用PUT動(dòng)詞執(zhí)行此操作。

將用戶添加到組:

PUT /groups/<group-id>/users/<user-id>

此操作不需要請(qǐng)求正文。

例如,這將用戶32添加到組21中 :

PUT /groups/ 21 /users/ 32

請(qǐng)注意,在這里我們需要問(wèn)一個(gè)問(wèn)題:是否將用戶添加到組是冪等的。 在我們的示例中,該操作是冪等的:用戶只能添加一次到組中。 因此,我們使用PUT動(dòng)詞。 如果分配操作不是冪等的(例如,可以將一個(gè)用戶多次添加到一個(gè)組中),我們必須使用POST而不是PUT。

在我的其他文章中,您可以閱讀有關(guān)冪等性以及POST和PUT之間的區(qū)別的更多信息。

或者,我們也可以根據(jù)需要從/ users角度對(duì)該操作進(jìn)行建模。

向用戶添加組:

PUT /users/<user-id>/groups/<group-id>

要從組中刪除用戶,我們使用DELETE動(dòng)詞。

從組中刪除用戶:

DELETE /groups/<group-id>/users/<user-id>

例如,這將用戶32從組21中刪除:

DELETE /groups/ 21 /users/ 32

反之亦然,從/ users一側(cè)開(kāi)始:

從用戶刪除組:

DELETE /users/<user-id>/groups/<group-id>

請(qǐng)注意,盡管我們?cè)? groups / <group-id> / users / <user-id>上執(zhí)行PUT和DELETE操作,但無(wú)需為此URI實(shí)現(xiàn)GET。 GET / groups / 21 / users / 32只會(huì)返回與GET / users / 32相同的結(jié)果(只要用戶是給定組的一部分)

替代解決方案

引入單獨(dú)的

另一種方法是創(chuàng)建一個(gè)完全獨(dú)立的資源來(lái)管理用戶和組之間的關(guān)系。

將用戶添加到組可能如下所示:

POST /group-members { groupId: 31 , userId: 23 }

為了將用戶分配到給定的組 ,我們可以使用與先前解決方案類似的請(qǐng)求:

GET /groups/<group-id>/members

但是,這一次它將返回一個(gè)組成員資源列表。

這種方法增加了一些復(fù)雜性(我們添加了一個(gè)可能具有其自身標(biāo)識(shí)符的全新資源)。 但是,如果我們想向關(guān)系中添加一些其他信息(例如, 用戶的加入日期 ),則該功能特別有用。 在以后的文章中,我們將詳細(xì)研究與其他數(shù)據(jù)之間的關(guān)系。

作為正常資源更新的一部分管理關(guān)系

另一種方法是使用標(biāo)準(zhǔn)更新操作來(lái)管理關(guān)系。 例如:

PUT /users/ 23 { "name" : "John" , "groups" : [ { "id" : "42" }, { "id" : "43" } ] }

盡管這在某些情況下可以正常工作,但我不推薦這種方法。

資源和關(guān)系經(jīng)常相互獨(dú)立地進(jìn)行更改。 將兩個(gè)操作合并在一起可能會(huì)導(dǎo)致各種問(wèn)題。 例如,從安全角度來(lái)看,兩個(gè)操作可能需要不同的權(quán)限。 客戶端可能被允許將用戶添加到組中,但可能沒(méi)有更新用戶本身的權(quán)限。

由于存在很多關(guān)系,因此這種方法的性能也非常麻煩。 因此,通常最好提供單獨(dú)的操作來(lái)更新資源和關(guān)系。

翻譯自: https://www.javacodegeeks.com/2020/06/rest-managing-many-to-many-relations.html

wcf:rest

總結(jié)

以上是生活随笔為你收集整理的wcf:rest_REST:管理多对多关系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。