HTTP請求封裝:Ajax與RESTful API


一、HTTP請求

  HTTP即超文本傳輸協議,用以進行HTML 文件、 圖片文件、 查詢結果等的網絡傳輸。

  • 一個完整的HTTP請求包括:請求行、請求頭、空行和請求數據(請求數據可以為空)
  • HTTP1.1標准請求方式有:GET, POST, PUT, HEAD, DELETE, CONNECT, TRACE, OPTIONS

  請求行和請求頭里包含URL、Request Method、Accept、Cookie、User Agent等等信息。實際使用中,即使只確定一個url,客戶端也會發出完整的HTTP請求。服務端也會返回HTTP響應,包含響應正文以及Status Code、Content Type、Date等等信息。其中狀態碼(Status Code)常見的有:

  • 200  請求成功
  • 400  客戶端請求的語法錯誤,服務器無法理解
  • 401  權限錯誤,身份認證失敗
  • 404  請求的資源(網頁等)不存在
  • 500  內部服務器錯誤 

二、Ajax

  原始的網頁開發方式是前后端合一的,代碼寫在一起,我請求一個地址,服務器就以相應正文的形式返回給我一個頁面。Ajax的出現就改變了這一現象,我們可以借此獲取所需的特定數據,在不重載整個頁面的情況下進行數據更新。

var xmlhttp;
if (window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();// IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執行代碼
}
else {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");// IE6, IE5 瀏覽器執行代碼
}
xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
    }
}
xmlhttp.open("GET", "/try/ajax/ajax_info.txt", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(fname=Henry&lname=Ford);

  如上例所示,Ajax中最重要的就是XMLHttpRequest對象,它以多種屬性和方法來定義HTTP請求、處理HTTP響應:

  • open()  --  定義請求方式、URL、是否異步
  • setRequestHeader()  --  添加請求頭信息
  • send()  --  發送請求,可附加請求數據
  • onreadystatechange()  --  readyState改變時觸發
  • readyState  --   標記請求狀態,從 0 到 4 (請求未初始化-服務器連接已建立-請求已接收-請求處理中-請求已完成,且響應已就緒)
  • status  --  響應的Status Code,200、404等等
  • responseText/responseXML  --  響應正文,字符串或xml形式的數據

三、RESTful API

  REST(REpresentational State Transfer)指的是一組架構約束條件和原則。滿足REST的接口實現方式,就是RESTful API,表現為:用URL定位資源,用HTTP動詞(GET,POST,DELETE,DETC)描述操作。

  URL中只使用名詞來指定資源,原則上不使用動詞。“資源”是REST架構或者說整個網絡處理的核心。用HTTP協議里的動詞來實現資源的添加,修改,刪除等操作。即通過HTTP動詞來實現資源的狀態扭轉:

  • GET 獲取資源數據(一項或多項)
  • POST 新建一個資源
  • PUT 更新資源(提供完整資源數據)
  • PATCH 更新資源(提供需要修改的資源數據)
  • DELETE 刪除資源

  網上教程在解說ajax的時候,通常會比較GET和POST,而RESTful API依據功能規范了多種請求方式,其中PATCH並不在HTTP1.1標准請求方式中。前端要使用這些請求方式,首先瀏覽器要支持,其次服務端也要實現對應功能,進行正確的響應。假設http://api.xx.com/v1/friends是一個“我的好友”數據接口:

  • DELETE      http://api.xx.com/v1/friends   刪除某個好友(在http參數中指定好友id)
  • PATCH        http://api.xx.com/v1/friends   添加某個好友(在http參數中附加改好友數據)
  • PUT             http://api.xx.com/v1/friends   更新個人好友數據(在http參數中附加所有好友數據)

  RESTful API擴展了前后端的工作方式,Web端不再用之前典型的PHP或JSP架構,而是改為前端渲染和附帶處理簡單邏輯(比如AngularJS或者BackBone的一些樣例)。Web端和服務端只使用API來傳遞數據和改變數據狀態。格式一般是JSON。由此,Web,iOS,Android和第三方開發者變為平等的角色通過一套API來與服務端交互。

四、$.ajax實踐RESTful API

  $.ajax提供了一些很實用的屬性設置:

  • url :規定發送請求的 URL。默認是當前頁面
  • type :規定請求方式,默認GET
  • data :規定要發送到服務器的數據
  • contentType :發送數據到服務器時所使用的內容類型
  • dataType :預期服務器返回的數據類型。默認根據 HTTP 包 MIME 信息來智能判斷

  回想下一個完整的HTTP請求包括那些東西呢?type設置的就是HTTP請求的Request Method,即請求方式、HTTP動詞;date包含的就是請求數據,contentType/dataType即請求頭中的Content-Type和Accept。對於ajax而言,應該還要設置請求成功和失敗后對應的回調函數。注意,當設置"application/json"時,需要對傳遞的數據做JSON.stringify處理

	var newFriend = {
		name : "aaa",
		age : 18
	};
	var config = {
		url: "/api/vi/friend",
		type: "PATCH",
		data: JSON.stringify(newFriend),
		contentType: "application/json",
		dataType: "json",
		success: function(data){
			console.log(data)
		},
		error: function(err){
			console.log("請求失敗:"+err)
		}
	};
	$.ajax(config);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM