簡體   English   中英

REST API-如何處理PUT方法中的可選參數? 用PATCH方法實現的區別是什么

[英]REST API - How to handle optional parameter in PUT method ? what is difference in implementation with PATCH method

我對帶有可選參數的put方法感到有些困惑。

假設模式是

Pet {
  name 
  catagory
  tag  (optional)
}

當我要創建寵物時,可以使用post方法,可以省略tag 當我想更新寵物時,問題就來了。 根據http規范, PUT方法將通過替換整個資源來更新實體,這意味着我需要傳遞tag參數。 如果我沒有通過tag ,那么默認值將為空,但是它將導致現有標簽被覆蓋為空。

對於patch方法,無論是否為可選參數,它只會更新部分參數。 很容易理解。

我不知道我是否誤解了,目前,在PUT方法中,我需要弄清楚傳遞了什么參數,然后更新對應字段。 但這與PATCH方法似乎相同。

需要了解的重要一點是,HTTP規范描述了語義(不同請求的含義),但沒有描述實現(如何實現)。 這是有意的-規范基本上說您的服務器應該假裝為鍵/值存儲,但並不限制您如何實現它。

PUT大致類似於保存文件:“這是字節數組,使用此鍵保存”。 如果您的存儲是文件系統,則只需將字節數組寫入磁盤。 如果您的存儲是內存中緩存,則只需更新緩存的副本。

如果您的存儲是一些RDBMS數據庫? 然后,您需要做一些工作,確定需要更改數據庫中的哪些行,以及需要向數據庫發送哪些命令以實現此目的。

關鍵是客戶端並不在乎-作為服務器,您可以將基礎存儲從RDBMS更改為文檔存儲,再將文件系統更改為文件系統,而這與客戶端無關。

在PUT方法中,我需要找出要傳遞的參數,然后更新對應的字段。 但這與PATCH方法似乎相同。

是。 在這兩種情況下,您都需要弄清楚如何在適當位置編輯資源。

PUT可能會更容易一點,因為它在語義上等效於“刪除舊版本,然后創建新版本”。 您不必擔心提供的數據合並到已經存儲的狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM