2017-06-26 38 views
1

PATCH被用於更新現有資源的部分信息和PUT用於替換爲新一個資源的舊信息。現在,AngularJS應該如何實現這個概念?當使用PATCH和PUT在AngularJS

一個可能方式可以是: -

在控制器,計算經由形式由用戶改變的字段的數量和設置的閾值等的50%,即,如果形式的50%以上字段由用戶更新,然後致電$http.put或以其他方式致電$http.patch

是否有任何標準的方法來應用這個概念或上述方式也是正確的方向?

+0

'PUT'創建,'PATCH'更新。不確定這個閾值/ 50%的廢話是所有關於... – scniro

回答

1

這真的取決於API如何建立應該在其每個資源上使用的請求類型。

在一個理想的世界,你會:

  • 使用POST創建資源集合的資源。例如POST /v1/cars的兩個請求將導致/v1/cars/1/v1/cars/2被創建。
  • 使用PUT來更新資源屬性,理想情況下,即使所有屬性保持相同的值,也要更改所有屬性。請求主體(有效載荷)應包含所有屬性。 PUT是冪等的,這意味着如果您發出兩個請求PUT /v1/cars/1,並且具有相同的請求主體(有效載荷),則會導致帶有標識符1的汽車,並使用屬性進行更新。N個相同的請求以相同的更新/修改的實體表示結束。
  • 使用PATCH對資源進行部分修改。所以如果你只是在汽車1上更新品牌和型號,而不是價格,那麼只要API支持,PATCH就是理想之選。

最終,在現實中,要回答你的問題,誰創建你所使用的API(你的後端),將決定哪些動詞應該用於什麼。所以實際上,你會看到POST用於upserts和更新,PUT用於創建,POST來執行GET。

如果你有超過該後端您angular.js應用程序依賴於控制,儘量堅持儘可能靠近你可以到這些準則。但這些只是指導方針,不需要強制執行,很多時候您的業務需求需要您轉移。因此,對於部分實體更新使用PATCH,對於完整實體更新使用PUT,或對所有內容(部分/完整)使用PATCH。你會發現什麼適合你。並且忘記你在問題中寫的百分比規則,這隻會​​讓事情變得複雜。

我個人使用PATCH的更新,無論是局部的完整。所以我不需要支持API的兩種更新資源的方式,所以我不支持PUT。但我的一些同事使用他們的團隊PUT作爲補丁。所以他們不支持PATCH。他們使用PUT進行部分更新,這對他們和他們的客戶都有效。

瞭解更多關於PATCHPOSTPUT

+0

好的,但是您如何看待在前端計算其部分更改還是完整的想法? –

+1

你不這樣做,如果補丁得到支持,你最終將使用補丁並更新/發送你完成業務需求的屬性。在我目前的公司,修補,不支持,而是把允許我們的API的部分更新,所以我們使用PUT了部分更新,我們不計算在前端或擔心送什麼,我們知道我們需要每個案例。我們不用擔心用空值來覆蓋未發送的屬性等。但是,真正取決於如何定義API的契約。 – Juan

0

PUT用於創建,發佈,更新看PUT vs POST in REST

你可以使用補丁例如非常具體的更新,如果關於資源的一些信息被緩存,另一種是沒有,你可以使用PATCH和PUT分開作爲一個明確的方式來區分哪一個會導致緩存刷新。

另一種方式來想,這將是一個複雜的資源,與其他人的關係資源的更新。

PATCH可以用來補充關係,以現有的同時POST將覆蓋整個列表。

說實話我通常使用PUT創建,但我不允許與PUT現有的entites的覆蓋,只發布更新。

我基本上只以下部分HTTP是因爲:

  • 即使它僅僅是局部的,有人看到PUT/POST的使用/ get會期望它做相應的操作。它使我的代碼更具可讀性。
  • 完全實施它可能需要相當長的時間,對我所做的事沒有任何好處。
  • 通常在我做什麼UI,創建和修改是2部分具有不同權限的分離屏,具有的兩個獨立方法+ URL使得有可能限制權利分別由配置,而不是通過代碼適用於每個人。請注意,如果您使用POST xxx創建並POST xxx/[id]更新,您有兩個不同的URL。
+0

當你只發送一組變化,放我一直認爲PATCH的適當和POST當你發送整個實體的東西。例如,在過去,我曾在一個項目中使用PATCH進行所有更新,因爲我們有一個安全模型,這意味着在大多數情況下我們不會將所有字段發送給客戶端。這在技術上總是一個三角洲。 –

+0

@MattHolland這就是整個問題,我試圖找出一些適當的例子。考慮到除了僅插入字段,我總是發送整個對象,我自己沒有使用PATCH。 – Walfrat

+0

PUT和POST之間的區別在於PUT是冪等的。具有相同有效負載的多個PUT請求導致與POST相對的相同更新實體,其中多個POST請求會導致多個副作用,如創建的多個條目。我不會說明或建議POST對更新有好處。 PATCH/PUT是適合這項工作的。以上所有內容,如果您要遵循每個動詞/請求的用途,那麼實際上,您可以讓這些請求執行任何操作:如POST進行更新。 – Juan

相關問題