原文地址:http://www.cnblogs.com/artech/p/restful-web-api-01.htmlhtml
REST不是一個標準,而是一種軟件應用架構風格。web
若是說RPC是一種面向操做的架構風格,那麼REST即是一種面向資源的架構風格。json
web
咱們所熟悉的web(World Wide Web、WWW、W3或者萬維網)實際上是一種利用HTTP協議獲取和操做網絡資源的方式。api
咱們獲取的資源包括:傳統信息(文字圖片),多媒體信息(音頻視頻)緩存
Web的核心:HTTP、超文本(Hypertext)和超媒體(Hypermedia)安全
超文本和超媒體規範了網絡信息的表現形式,而HTTP則提供了網絡訪問的標準協議。服務器
HTTP
TCP/IP與HTTP
-
- TCP/IP是以IP和TCP協議爲核心的一整套網絡協議的總稱,因此有時候咱們也稱其爲TCP/IP協議簇。
- TCP/IP協議簇劃分爲如上圖所示的4個層次(應用層、傳輸層、網絡層和鏈路層),構成整個協議簇的各個子協議處於相應層次中。
- IP協議是一個無鏈接(Connectionless)的網絡協議,每次數據報的處理對它來講均是獨立的,所以IP協議也不能提供針對有序傳輸(數據接收的順序與發送的順序一致)的保證。
- TCP是一個基於鏈接的協議,數據交換雙方在進行報文傳輸以前須要創建鏈接,報文傳輸結束以後須要關閉鏈接。這是一個雙工(Duplex)鏈接,數據交換的雙工都可以利用它向對方發送數據。
- TCP利用「接收確認」和「超時重傳」機制確保了數據可以成功抵達目的地。
- 每一個TCP報文段都具備一個16位的檢驗和(Checksum),因此接收方能夠根據它確認數據在傳輸過程當中是否被篡改。
- TCP還提供了「流量控制」功能避免了雙方因緩存區大小不一致而致使報文丟失。
- HTTP(Hypertext Transfer Protocol),全稱爲「超文本傳輸協議」,是TCP/IP協議簇的一部分。
- 因爲TCP協議是一個「可靠」的協議,HTTP天然也能提供可靠數據傳輸功能。
- IP協議利用IP地址來定位數據報發送的目的地,而利用域名系統(DNS)能夠實現域名與IP地址之間的轉換。
- TCP協議利用端口號標識應用程序,因此某個應用程序在使用TCP協議進行通訊的時候必須指定目標應用的IP地址(或者域名)和端口號。
- HTTP默認採用的端口號爲80,而HTTPS(利用TLS/SSL爲HTTP提供傳輸安全保障)的默認端口號則爲443
Web資源
媒體類型
-
- 不管是經過HTTP請求從Web服務器上獲取資源,仍是利用請求向服務器提交資源,響應或者請求的主體(Body)除了包含承載資源自己的數據以外,其報頭(Header)部分還應該包含表示數據形態的媒體類型。
- 媒體類型又被稱爲MIME(Multipurpose Internet Mail Extension)類型,MIME是一個互聯網標準,它擴展了電子郵件標準,使其可以支持非ASCII字符、二進制格式附件等多種格式的郵件消息。
- text/html:HTML格式的文檔。
- text/xml(application/xml):XML格式的文本。
- text/json(application/json): JSON格式的文本。
- image/gif(image/jpeg、image/png):GIF(JPEG、PNG)格式的圖片。
- audio/mp4(audio/mpeg、audio/vnd.wave):MP4(MPEG、WAVE)格式的音頻文件。
- video/mp4(video/mpeg、video/quicktime):MP4(MPEG、QUICKTIME)格式的視頻文件。
URI、URL和URN
-
- 採用URI來標識Web資源已經成爲了一種共識,實際上URI的全稱爲「統一資源標誌符(Uniform Resource Identifier)」。
- 一個URL確定是一個URI,可是一個URI並不必定是一個URL,URL僅僅是URI的一種表現形式而已。
- URI是Web資源的標誌符,因此只要求它具備「標識性」便可;
- URL全稱爲「統一資源定位符(Uniform Resource Locator)」,因此除了標識性以外,它還具備定位的功能,用於描述Web資源所在的位置。
- 一個完整的URL包含協議名稱、主機名稱(IP地址或者域名)、端口號、路徑和查詢字符串5個部分。
HTTP事務
-
- HTTP是一種無狀態的網絡協議。
- HTTP採用簡單的「請求/響應」消息交換模式,一次HTTP事務(Transaction)始於請求的發送,止於響應的接收。
- 針對客戶端和Web服務器的屢次消息交換來講,每一個HTTP事務均是相互獨立的。
http方法
-
- HTTP採用簡單的請求/響應模式的消息交換旨在實現針對某個Web資源的某種操做。
- 針對資源的操做類型,不外乎CRUD(Create、Retrieve、Update和Delete)
- 一個HTTP請求除了利用URI標誌目標資源以外,還須要經過HTTP方法(HTTP Method或者HTTP Verb)指名針對資源的操做類型。
- 經常使用的HTTP方法 包括GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECTION和PATCH等
響應狀態碼
-
- 100~199:信息狀態碼,表明請求已被接受,須要繼續處理。
- 200~299:成功狀態碼,表明請求已成功被服務器接收、理解、並接受。
- 300~399:重定向狀態碼,表明須要客戶端採起進一步的操做才能完成請求。
- 400~499:客戶端錯誤狀態碼,表明了客戶端看起來可能發生了錯誤,妨礙了服務器的處理。
- 500~599:服務器錯誤狀態碼,表明了服務器在處理請求的過程當中有錯誤或者異常狀態發生,也有多是服務器意識到以當前的軟硬件資源沒法完成對請求的處理。
HTTP報文
-
- 客戶端和Web服務器在一次HTTP事務中交換的消息被稱爲HTTP報頭
- 客戶端發送給服務器的請求消息被稱爲請求報文
- 服務器返回給客戶端的響應消息被稱爲響應報頭
- 請求報文和響應報頭採用純文本編碼,由一行行簡單的字符串組成
- 一個完整的HTTP報文包括:起始行,報頭集合,主體內容
- 起始行:表明HTTP報文的第一行文字,請求報文利用起始行表示採用的HTTP方法、請求URI和採用的HTTP版本,而響應報文的起始行在承載着HTTP版本和響應狀態碼等信息。
- 報頭集合:HTTP報文的起始行後面能夠包含零個或者多個報頭字段。每一個報頭表現爲一個鍵/值對,鍵和值分別表示報頭名稱和報頭的值,二者經過冒號(「:」)進行分割。HTTP報文采用一個空行做爲報頭集合結束的標誌。
- 主體內容:表明報頭集合結束標誌的空行以後就是HTTP報文的主體部分了。
- 客戶端提交給服務器的數據通常置於請求報頭的主體,而響應報頭的主體也承載着服務器返回給客戶端的數據。
- 不管是請求報文仍是響應報文,其主體部分均是能夠缺省的。