我该如何更新REST资源?

时间:2010-06-30 14:27:48

标签: 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>john@doe.com</email>
   </user>
</response>

如何更新John的电子邮件? HTTP PUT浮现在脑海中,但我要通过要求完整的XML(匹配HTTP GET响应)来修改资源,从而使我的客户端变得困难。

  

PUT方法请求   封闭的实体存储在   提供了Request-URI。如果   Request-URI指的是已经存在的   现有资源,封闭实体   应该被视为经过修改   居住在的人的版本   原始服务器。

还有其他办法吗?

1 个答案:

答案 0 :(得分:7)

如果您的服务器框架足够灵活,可以执行以下操作:

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

john@newemail.com

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

通过使用URL将电子邮件称为自己的资源,您可以使用text / plain等简单格式直接将其发送到它。在响应中,Content-Location网址为客户端提供了更改对用户资源产生影响的指示。

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

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