2010-06-30 68 views
5

我不知道如何去更新REST资源的各个属性。考虑下面的例子:我应该如何更新REST资源?

# HTTP GET to /users/1.xml 
<?xml version="1.0" encoding="UTF-8" ?> 
<response> 
    <user> 
     <id>1</id> 
     <name>John Doe</name> 
     <email>[email protected]</email> 
    </user> 
</response> 

我应该如何方便更新John的电子邮件?想起HTTP PUT,但我会通过要求完整的XML(匹配HTTP GET响应)来修改资源,从而使我的客户端变得更加困难。

该 封闭实体 供给请求URI下储存的PUT方法请求。如果 请求URI指的是已有的资源,则封闭实体 应该被认为是原始服务器上的 版本的一个修改后的 版本。

还有别的办法吗?

回答

7

如果你的服务器架构是足以应付它灵活,你可以这样做:

Request: 
PUT /users/1/email 
Content-Type: text/plain 

[email protected] 

Response: 
200 OK 
Content-Location: /users/1 

通过URL来指代电子邮件作为自己的资源,你可以使用一个简单的格式,直接就把它像文本/平原。在响应中,Content-Location url向客户端指示该更改已对用户资源产生影响。

PATCH方法也是您可以进行部分更新的另一种方法。这是一种新引入的方法,目前还没有用于发送XML差异文档的标准格式。所以,如果你采取这种方法,你不会找到太多的指导。

要考虑的另一件事是,REST对于大粒度更新效果最好。如果您发现自己需要进行这些小改动,那么您可能需要重新考虑分布式架构。