2010-06-30 92 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對於大粒度更新效果最好。如果您發現自己需要進行這些小改動,那麼您可能需要重新考慮分佈式架構。