代码之家  ›  专栏  ›  技术社区  ›  Igor Brejc

RESTful服务和更新操作

  •  13
  • Igor Brejc  · 技术社区  · 14 年前

    我知道REST是面向资源的,它使用标准HTTP方法粗略地转换为对这些资源的CRUD操作。但我只是想更新一个 部分 资源?

    例如,假设我有 Payment 我想把它的状态标记为” paid “。我不想 POST 整体 付款 通过HTTP的对象(有时我甚至没有所有的数据)。

    这样做的休息方式是什么?我已经看到Twitter使用以下方法 updating Twitter statuses 以下内容:

    http://api.twitter.com/1/statuses/update.xml?status=playing with cURL and the Twitter API
    

    这种方法是“休息的精神”吗?

    更新 :放置-发布

    同时我发现了一些链接:

    4 回复  |  直到 11 年前
        1
  •  10
  •   Chris Smith    12 年前

    这样做的理想方法是更改资源的一部分(子资源),并让服务器返回 303见他人 使用位置标题指向已更改的资源。这个 303见他人 告诉客户机,由于请求的结果,一些其他资源已经更改,客户机应该更新它所持有的表示。

    在您的示例中(当然,媒体类型是假设的):

    1. Client retrieves payment representation
    GET /payments/2
    
    200 Ok
    Content-Type: application/payment+xml
    
    <payment>
      <status href="/payments/2/status" value="pending"/>
    </payment>
    
    2. Client updates status
    PUT /payments/2/status
    Content-Type: text/plain
    
    payed
    
    303 See Other
    Location: /payments/2
    
    3. Client follows the 303 redirect 
    GET /payments/2
    
    200 Ok
    Content-Type: application/payment+xml
    
    <payment>
      <status href="/payments/2/status" value="payed"/>
    </payment>
    
    
        2
  •  4
  •   Dominik    14 年前

    post应用于修改资源

    编辑:马丁·福勒的文章 Richardson Maturity Model 是一个很好的休息介绍。

        3
  •  0
  •   kako-nawao    11 年前

    补丁有什么问题? “部分修改”的问题似乎需要它,特别是考虑到有时你还没有得到“替换它”所需的全部数据… 但老实说,我认为认真遵循“post=create,put=replace,patch=update”的理念毫无意义,而且我认为只使用post没有任何错误。

        4
  •  -1
  •   Boldewyn    14 年前

    我想,这就是波斯特的目的:“积垢”中的“u”。

    将数据发布到现有资源。资源决定如何处理它,并得到更新。另外,post数据可能只是完整资源的一个片段。

    Twitter的方法是不安宁的,因为他们超载得到。