首页 文章

我该如何更新REST资源?

提问于
浏览
5

我不确定如何更新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 回答

  • 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 URL向客户端指示更改已对用户资源产生影响 .

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

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

相关问题