2015-04-06 40 views
0

我是絕對新的REST,我對安全方法在REST中是什麼以及冪等方法有以下疑問。REST Web服務中的安全方法究竟是什麼?

我知道(但它可能是錯誤的)GET,HEAD,OPTIONS和TRACE方法被定義爲安全的,因爲它們僅用於檢索數據。

但現在我讀這篇文章:http://restcookbook.com/HTTP%20Methods/idempotency/,並說:

安全的方法是HTTP不修改資源的方法。對於 實例,在資源URL上使用GET或HEAD時,千萬不要更改 資源。

而且直到這裏是確定的,它是什麼,從我YEK知道不同,但斷言之後:

然而,這並不完全正確。這意味着:它不會更改 資源表示形式。安全方法 仍然有可能在服務器或資源上進行更改,但這不應該以不同的表示方式反映 。

這個斷言究竟意味着什麼?代表什麼?什麼意味着一個安全的方法如此改變資源,但是這種改變不會反映到不同的表示中?

那麼它也確實這個例子:

GET /blog/1234/delete HTTP/1.1 

,並說這是不正確,如果這實際上會刪除博文,並斷言:

安全的方法是可以被緩存的方法,預取沒有任何 對資源的影響。

回答

2

究竟是什麼表示?

「表示」是從服務器返回的表示對象狀態的數據。所以,如果你在http://server/puppy/1它應該返回小狗的「代表權」(因爲它不能返回當然實際小狗。)

然而,這並不完全正確。這意味着:它不會更改 資源表示形式。仍然有可能,安全方法 更改服務器或資源上的東西,但這不應該反映在 中有不同的表示形式。

這個斷言究竟意味着什麼?

這意味着如果你連續兩次GET/server/puppy/1,它應該會給你相同的響應。但是,想象一下,您有一個包含每隻小狗被查看次數的字段。該字段用於提供列出前10位最常見的小狗的頁面。該信息通過GET/server/puppystats提供。 GET/server/puppy/1可以更新該信息。但它不應該更新有關小狗本身的信息。或者,如果它更新關於小狗本身的信息,則該信息不是由GET/server/puppy/1返回的小狗表示的一部分。它只是通過另一個URL可用的其他一些表示的一部分。

如果有幫助,這與C++中的「mutable」關鍵字在應用於const對象時類似。 「可變」允許你修改對象,但它不應該以在類之外可見的方式修改它。

+0

所以關於表示我說我的小狗對象(與id = 1關聯)的JSON和XML返回狀態的日期是2個不同的表示相同的數據? – AndreaNobili

+1

我不知道。我在想,一個不同的表示會是一組不同的指向同一個對象的字段。但是,也許更改編碼也被認爲是不同的表示。 –