簡體   English   中英

HTTP PATCH:處理數組,刪除和嵌套密鑰創建

[英]HTTP PATCH: Handling arrays, deletion, and nested key creation

我正在尋找一個實用指南來實現PATCH動詞,以便使用JSON在RESTful api中對名詞進行部分更新。 了解PATCH是用於部分更新的,我們仍然缺乏關於刪除鍵,創建或更新嵌套鍵和數組的語法的標准化。

讓我們說我GET一個對象:

// GET users/42
{
  id: 42,
  name: 'SimpleAsCouldBe',
  city: 'San Francisco',
  roles: ['viewer','editor'],
  posts: {
    '01': {},
    '02': {},
  }
}

...然后我想更新它:

// PATCH users/42
{
  name: 'SimpleGuy',                   // CLEAR:   update the key's value
  email: 'hey@google.com',             // CLEAR:   add the new key
  city: null                           // UNCLEAR: delete the key?
  roles: ['owner'],                    // UNCLEAR: replace the whole array?
  posts: {
    '02': { title:'how to pop lock' }, // CLEAR:  update nested key
    '03': { title:'how to salsa' }     // CLEAR:  create new nested key
  }
  notes: {
    '01': { title: 'a note title' }    // CLEAR (but disallowed?): create wrapping key
  }
}

PATCH rfc拒絕創建嵌套密鑰 我認為這是一個規范錯誤,因為創建嵌套鍵是非模糊的。

我可以發送一個完整的對象差異,就像這個庫生成的那樣,但是這使得添加或更新密鑰的明顯情況更加冗長。

如何使用HTTP PATCH以精益方式處理數組,刪除和嵌套鍵?

規范清楚地詳細說明了如何格式化PATCH請求的JSON主體。 你使用的是完全不同的格式。 鑒於此,我並不感到驚訝。 身體應該看起來像:

   [
     { "op": "replace", "path": "/name", "value": "SimpleGuy" },
     { "op": "add", "path": "/email", "value": "hey@google.com" },
     { "op": "replace", "path": "/city", "value": null },
     { "op": "replace", "path": "/roles", "value": [ "owner" ] },
     { "op": "add", "path": "/posts/02/title", "value": "how to pop lock" },
     { "op": "add", "path": "/posts/", "value": "03" },
     { "op": "add", "path": "/posts/03/title", "value": "how to salsa" },
     { "op": "add", "path": "/notes", "value": { "title": "a note title" } }
   ]

回去閱讀規范。 它甚至提供了解決您大部分問題的示例。

暫無
暫無

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

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