如何在REST中有效地更新复杂的大对象?

时间:2014-05-13 03:56:11

标签: javascript html json rest optimization

假设我有一个来自html页面的复杂对象,它被映射到这个JSON结构:

{
    id:"", //is not shown to user
    title : "",
    description: "",
    summary: "",
    // other too many fields
}

要使用“常见”REST方法更新此记录,我应该使用:

- POST rest/record/{id}

使用“通用”方法将完全记录对象编组到JSON对象并传递给REST服务,然后验证此完全对象,将SQL查询传递给数据base和DB引擎使用所有数据更新记录。但是如果用户只更新标题中的一个符号呢?

在这种情况下,我应该将这个对象分成几个:

{
    id:"", //is not shown to user
    { recordId:"", title : "",         } ,
    { recordId:"", description: "",    } ,
    { recordId:"", summary: "",        } ,
    // other too many fields
}

我应该如何重新组织其他网址?像那样:

- POST rest/record/{id}/title
- POST rest/record/{id}/description
- POST rest/record/{id}/summary
- others

这种方法的URL是好还是坏(我的意思是来自endScript和REST后端编程的javaScript)?还有其他方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

不使用POST,而是使用PATCH并仅发送已更改的内容:

PATCH rest/record/{id}

Data: { title: "new title" }

诸如rest / record / {id} / title,rest / record / {id} / summary等网址并不是真正的RESTfull,因为它们不是资源,而是资源的属性。

答案 1 :(得分:0)

请参阅此过去的问题,了解此处的选项(包括PATCH)。

Best practice for partial updates in a RESTful service

答案 2 :(得分:0)

您有以下选择:

  • 使用PATCH并仅发送title
  • 使用PUT并再次发送整个数据
  • 使用PUT并使用该属性作为子资源,使用网址:/resource/title

POST不是幂等的,所以你不应该使用它进行更新)