2011-10-14 51 views
0

我们已经实现了一个RESTful webservice。下面是它的样子Http PUT做增量更新

GET /person/1234 
GET /person/list 

POST /person 
POST /person/list 

PUT /person/1234 
PUT /person/list 

基本上,创造一个人,你POST到/人或/人/列表

要更新一个人,你投入/人/ 1234或/人/列表

一个人是这样的:

<person> 
    <id>1234</id> 
    <name>Name1</name> 
    <age>50</age> 
    <education>high school</education> 
</person> 

问: 我可以使用通过发送

PUT更新人
<person> 
    <age>55</age> 
</person> 

据我了解PUT,你不能用它来增量更新。我不应该使用POST来做到这一点?

我们可以放松PUT的这个用例的定义,使术语变得简单。因为那么PUT将意味着更新,POST将意味着创建。

假设您不能要求客户端发送更新的完整资源表示。

回答

1

如果您的客户端支持的话,我想PATCH是你在找什么:

PATCH覆盖在一个可预见的和有效的交易方式指定资源的一部分(如果整个补丁不能服务器不应该做它的任何部分)

+0

客户端不支持它。我特别想知道是否可以将PUT的含义超载,以便为我执行增量更新。如果我这样做,我会遇到什么问题。 – Qwer

+0

什么是客户?它究竟如何不允许PATCH? –

0

虽然不是很流行,但有一个PATCH verb in HTTP。这是它的意图,但不确定是谁实施它。据我所知,POST通常用于修补,但它不是REST标准,但是如果在您的环境中获得该约定,则可以实施它。

+0

谢谢。是的,我知道PATCH,我们可能无法使用它。但是,问题是 - 我可以使用PUT来执行增量更新吗? – Qwer

+0

那么,当然你可以做到这一点,但这不是标准的几个原因。首先,它不是标准的*本身*(PUT没有被指定,而是代替整个对象);那么它可能会导致不一致的状态(如果部分放置一个不存在的对象,那么可能不会构建一个功能对象),等等。 –