2012-08-23 35 views
3

我需要發送數據並比較它是否存在於API服務器中。例如:正確的REST謂詞用於檢查敏感數據輸入是否有效?

$a['foo'] = 'hello'; 
$a['bar'] = 'world'; 
$rest->verb('resource', $a); 

如果foobar值在API服務器存在,它應該返回OK其他Bad Request

我想用GET作爲動詞,因爲它聽起來更合適,只是在查詢字符串中發送數據,但如果什麼foobar敏感信息和更安全的通過郵寄發送/放?但是,我不添加或更新任何東西。

什麼是在這種情況下,最好的動詞?

回答

3

嗯,排除GET 爲了安全考慮,只留下了POST/PUT(扁平化忽略DELETE)。

這些中可用的選項,我建議使用POST,因爲它是比較常見的(尤其是外REST)和整體不太特定的HTTP動詞。

REST for the Rest of Us來自:

POST謂詞可以攜帶多種含義。 這是HTTP動詞的瑞士軍刀。對於一些資源,它可能被用來改變內部狀態。對於其他人,其行爲可能是遠程過程調用的行爲。


用GET的問題是,任何數據到服務器必須通過URI(資源名稱和查詢字符串)被轉移。因此,該響應假定使用POST動詞的請求不會使用該URI來傳送敏感信息,或者它不會比GET好。文章How Secure are Query Strings over HTTPS?討論了一些關於URI中的數據的問題,即使使用HTTPS連接(其中應爲用於所有敏感請求)。

+0

所以基本上POST是REST的RPC。這是我第一次讀到。我希望「REST警察/純粹主義者」同意這一點:-) – IMB

+1

(請注意,上面的「意識形態」的使用是鏡像警察/純粹主義者,是一個誇張的;-) – 2012-08-24 17:00:18

1

如果你發送一個問題一樣,到服務器並獲得OK了。一毫秒後,它可能不會再好了。因此,如果您使用來自服務器的舊的(毫秒但仍舊)響應作爲接受某些客戶端輸入的真實信息,那麼稍後嘗試存儲該數據時您可能會出錯。

你應該簡單地嘗試在服務器上創建的東西,這意味着它應該放在或POST。如果你閱讀了關於REST的內容,它表示如果你知道結果資源的URL和POST,就應該使用PUT。你有它。如果一切正常,你可能會發送201,否則發送409。

你把服務器上創建什麼/ POST並不一定是最終的數據 - 它可能只是一個表明有客戶聲稱此ID或任何令牌。

現在,如果你還是想在服務器上的所有存儲任何東西之前,你的額外前檢查,你可能想看看在期望或接受或東西...不不太記得。在使用REST時,以下是您的兩個朋友。:)

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

我還建議對REST這本很好的書:http://shop.oreilly.com/product/9780596529260.do