2017-02-05 39 views
0

我一直在閱讀關於REST的一個星期,並且我可以在1分鐘內瞭解到這一點,我可以使用HTTP請求,例如GET/POST/PUT/DELETE來操縱網站的內容無國籍狀態在RESTfull服務中意味着什麼

但是當人們描述REST時,什麼是無狀態和其他難以理解的術語?

爲什麼不能我只是將內容添加到數據庫throught的$_GET['']方法就是這樣,http://localhost/register.php?id=1&username=bob,在這裏我使用了所謂的$_GET[]方法 - 這是我相信不同的是,REST(GET/PUT)方法 - 和插入到數據庫,而不是使用的東西,做同樣的只是在一個更復雜的方式信息,以瞭解

+0

[維基百科(https://en.wikipedia.org/wiki/Representational_state_transfer#Stateless)實際上概括起來很好:'的客戶機 - 服務器通信是通過無客戶端上下文約束被存儲請求之間的服務器上。來自任何客戶端的每個請求都包含爲請求提供服務所需的所有信息,並且會話狀態保存在客戶端中。 '例子:你不只是驗證自己一次,然後做所有你想要的API請求,你在每個請求中驗證你自己。例如通過請求中的某個標記或資源URI本身。 – ccKep

回答

0

什麼是無國籍

無國籍是一個特定的架構約束送支持擴展,可視性和可靠性。菲爾丁在third chapter of his dissertation中描述了它。

客戶端到服務器的每個請求都必須包含理解請求所需的所有信息,並且不能利用服務器上存儲的任何上下文。會話狀態完全保留在客戶端上。

這些約束改進了可見性,可靠性和可伸縮性的屬性。可見性得到改進,因爲監控系統不必超越單個請求數據,以確定請求的全部性質。可靠性得到改善,因爲它減輕了部分故障恢復的任務[133]。由於不需要在請求之間存儲狀態,可擴展性得到了改進,使服務器組件可以快速釋放資源並進一步簡化實施。

客戶端無狀態服務器的缺點是它可能會通過增加一系列請求中發送的重複數據(每個交互開銷)來降低網絡性能,因爲這些數據不能在共享上下文中留在服務器上。

總之,HTTP支持這種架構約束的事實是它能夠如此成功的原因之一。

爲什麼不能我只是將內容添加到數據庫

你可以,當然,修改服務器狀態;也就是說,響應於HTTP請求的「資源」狀態。在這種情況下,你受到HTTP的限制(例如,GET應該有read-only semantics)。

但是服務器不應該會作出一個關於當前客戶端狀態無法當前正在處理的消息中得到證明任何假設。

+0

但是,如果我使用POST方法,那麼我會做同樣的事情,如果我使用插入數據庫方法,我不會? –

+0

我不知道如何解釋這個問題。 – VoiceOfUnreason

+0

INSERT INTO DB是一種插入數據庫的CRUD方式,如果我通過URL獲得信息('$ _GET ['']'),我將擁有與If相同的「事件」我將使用REST的POST方法 由於使用REST,我可以使用POST方法創建內容, 它根本沒有意義嗎? –