本節書摘來華章計算機出版社《javascript應用程式設計》一書中的第1章,第1.13節,作者:eric elliott 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
表述性狀态傳遞(representational state transfer,rest)是用戶端與服務端的通信架構,rest架構采用關注點分離原則在資料資源與資料消費者之間建立了多層結構。在這種架構體系下,服務端僅關注資料資源的管理,而無需操心界面實作,用戶端則可以以任何形式或語言去做界面實作。rest架構并不關心界面是被誰或是被怎樣實作的,它僅處理并維護用戶端與服務端的應用程式狀态。
restful應用使用http方法(post、get、put 和 delete)來告訴伺服器,用戶端目前對資源的操作行為,這些行為包括:
· 在資源集合建立條目: http post。
· 擷取資源狀态: http get。
· 更新(替換)資源: http put。
· 删除資源或資源集合: http delete。
如果你熟悉資料庫的crud(建立、檢索、更新和删除)操作,你會覺得上述行為與crud很相似,你可以将它們對号入座,不過要記住,在rest中,更新資源意味着将資源替換。
圖1-2是一個較為典型的狀态傳遞時序圖。

圖1-2:rest時序圖
用戶端通過http get請求服務端上的統一資源訓示符(uri)來擷取資料。在服務端上每個資源對應唯一的uri。
服務端從資料庫或緩存中檢索資料,随後将之封裝成用戶端所需的資料結構傳回。
資料以文檔的形式被傳回,一般包含了經過json編碼後的對象,盡管rest并沒有嚴格指定資料交換格式。現今仍舊有不少基于xml的restful應用,随着json慢慢成為一項标準,越來越多的restful應用同時支援json與xml兩種資料交換
格式。
用戶端接收并處理資料。
用戶端通過http put請求服務端同一uri上報處理過的資料。
用經put請求上報的資料替換服務端原有的資料。
使用put還是post做資源更新常常是一個讓人感到困惑的問題,rest制定了資源通路的規則。除非用戶端本身可以提供較為安全的唯一id辨別符,否則在資源集合建立資源的操作一律采用post方式處理。在這種情形下,服務端生成id辨別符并傳回給用戶端。
例如, 你可以通過post方法通路服務端的/users/資源路徑進而建立一個新使用者,此時服務端會給新使用者生成一個唯一id辨別符,随後你便可以通過/users/userid/資源路徑擷取該資源。在服務端每一個唯一的uri路徑對應一個新的使用者,post方法不能用于更新或修改現有的資源集,僅能夠做資源添加。
而使用put方法通路服務端的/user/userid資源路徑,則可以更新使用者的資訊,注意,這項操作将完全将原有的資源替換,是以請確定所更新資源内容的資訊完整性。
在第8章中我們會詳細介紹rest架構。