內文導引:
REST
表現層狀態轉換,是一種網站架構設計風格,用以定義資源跟管理資源。Web Service 中使用 REST 概念實作出來的API 就被稱為 RESTful API再次強調:REST是設計風格,不是標準而REST架構風格最重要的架構限制有以下六個:
- 客戶端-伺服器(Client-Server)
- 客戶端-伺服器結構限制的目的是將客戶端和伺服器端的關注點分離。將使用者介面所關注的邏輯和資料儲存所關注的邏輯分離開來有助於提高使用者介面的跨平台的可移植性。通過簡化伺服器模組也有助於伺服器模組的可延伸性。
- 無狀態(Stateless)
- 伺服器不能儲存客戶端的資訊;每一次從客戶端傳送的請求中,要包含所有的必須的狀態資訊,對談資訊由客戶端儲存,伺服器端根據這些狀態資訊來處理請求。
- 伺服器可以將對談狀態資訊傳遞給其他服務,比如資料庫服務,這樣可以保持一段時間的狀態資訊,從而實現認證功能。
- 當客戶端可以切換到一個新狀態的時候傳送請求資訊。
- 當一個或者多個請求被傳送之後,客戶端就處於一個狀態變遷過程中。每一個應用的狀態描述可以被客戶端用來初始化下一次的狀態變遷。
- 快取(Cacheability)
- 如同全球資訊網一樣,客戶端和中間的通訊傳遞者可以將回覆快取起來。回覆必須明確的或者間接的表明本身是否可以進行快取,這可以預防客戶端在將來進行請求的時候得到陳舊的或者不恰當的資料。管理良好的快取機制可以減少客戶端-伺服器之間的互動,甚至完全避免客戶端-伺服器互動,這進一步提了高效能和可延伸性。
- 統一介面(Uniform Interface)
- 這是 RESTful 系統設計的基本出發點。它簡化了系統架構,減少了耦合性,可以讓所有模組各自獨立的進行改進。包括下列四個限制:
- 請求中包含資源的 ID(Resource identification in requests)
- 資源通過標識來操作(Resource manipulation through representations)
- 訊息的自我描述性(Self-descriptive messages)
- 用超媒體驅動應用狀態(Hypermedia as the engine of application state (HATEOAS))
請求中包含了各種獨立資源的標識,例如,在Web服務中的URI。資源本身和傳送給客戶端的標識是獨立。例如,伺服器可以將自身的資料庫資訊以HTML、XML或者JSON的方式傳送給客戶端,但是這些可能都不是伺服器的內部記錄方式。
當客戶端擁有一個資源的標識,包括附帶的元資料,則它就有足夠的資訊來刪除這個資源。
每一個訊息都包含足夠的資訊來描述如何來處理這個資訊. 例如,媒體類型 (media-type) 就可以確定需要什麼樣的剖析器來分析媒體資料.
同使用者存取Web伺服器的Home頁面相似,當一個 REST 客戶端存取了最初的REST應用的URI之後,REST 客戶端應該可以使用伺服器端提供的連結,動態的發現所有的可用的資源和可執行的操作。隨著存取的進行,伺服器在回應中提供文字超連結,以便客戶端可以得到當前可用的操作。客戶端無需用確定的編碼的方式記錄下伺服器端所提供的動態應用的結構資訊。
- 分層系統(Layered System)
- 客戶端一般不知道是否直接連接到了最終的伺服器,或者是路徑上的中間伺服器。中間伺服器可以通過負載均衡和共享快取的機制提高系統的可延伸性,這樣可也便於安全策略的部署。
- 按需代碼(Code-On-Demand,可選)
- 伺服器可以通過傳送可執行代碼給客戶端的方式臨時性的擴充功能或者客製化功能,例如Java Applet、Flash或JavaScript。
AJAX
非同步的 javascript 與 XML,是眾多技術的集合技術
首先,非同步是什麼?
舉個例子,非常簡單:
同步
程式碼就是一行一行執行下去,還未執行完畢不能往下
非同步
程式碼不用等待自己執行完畢就可以先執行下一行程式碼
而在有AJAX技術之前,網頁都是在把所以資源下載完後才能顯示回前端給使用者,而如果在執行某一步時特別久時,畫面則會一片空白
但如果使用者只需要用到網頁的其中一部分呢?載入全部又顯得浪費效能
而 AJAX 就是為了解決此問題,AJAX 是用來讓使用者在需要取的資源時,才向伺服器發送請求,在透過js渲染到前端畫面上