比如我們訪問百度的首頁,輸入的url地址是:https://www.baidu.com/
那么當我們在瀏覽器地址欄中輸入url,敲回車后,發生了什么事情?怎么就能通過1個url地址就能看到百度的首頁了呢?
先來通過瀏覽器前端工具(Chrome瀏覽器的開發者工具 F12)捕捉一下百度頁面的請求
當我們在請求一個頁面的時候,會顯示服務器返回的資源,其中包含了html,css,和JavaScript,除此之外,服務器還可以返回圖片,視頻,字體和插件等類型的資源。這些資源全部使用HTTP協議傳輸。
如果把HTTP協議看作是高速公路的話,那么在高速公路上跑的各種拉滿不同貨物的車輛就是資源。不同的車輛裝載的貨物不一樣,因此它們的目的地也不一樣。比如有些車輛拉的是生豬,是要送到屠宰場的;有些車輛拉的是西瓜,是要送到水果批發市場的。HTTP協議上傳輸的資源也是一樣,類型不同,作用也不一樣。數據就是其中的一種資源,數據是接口的本質,你可以把數據當作是我們要運輸的貨物西瓜。首先我們可以選擇不同的運輸方式,走高速公路或走鐵路,這就是數據傳輸協議的選擇(如HTTP/SOAP)。其次是西瓜的存放方式,是直接將西瓜堆積在車廂里,還是把每個西裝放到盒子里再裝箱,這就是數據格式的選擇(如XML/JSON/CSV)。JSON格式的數據如圖所示。
調用 百度首頁的接口,首先,該接口是通過HTTP協議的GET方式發送請求的,所以可以使用瀏覽器調用,其次接口數據使用的json格式,這是當前主流的接口數據格式之一。
從接口的調用方式和數據格式來看,顯示並不是直接給普通用戶來使用的,它主要為其它開發者提供調用。
上面的例子中提到的協議和數據格式是構成接口的兩個要素。在當前web接口中,應用最普遍的協議是HTTP協議,而JSON是目前最流利的接口數據傳輸格式之一。接下來簡單介紹一下這兩項技術。
HTTP
HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是從萬維網(WWW:World Wide Web)服務器傳輸超文本到本地瀏覽器的傳送協議。HTTP基於TCP/IP通信協議來傳遞數據(HTML文件、圖片文件、媒體)等。
HTTP協議工作於客戶端-服務端架構上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端(即Web服務器)發送請求。
1.HTTP協議的主要特點:
無連接:無連接的含義是限制每次連接只處理事個請求。服務器處理完客戶的請求,並收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。
媒體獨立:這意味着,只要客戶端和服務器知道如何處理的數據內容,任何類型的數據都可以通過HTTP發送。客戶端以及服務器指定使用適合的MIME-type內容類型。
關於MIMI-type是什么請看這里:
無狀態:HTTP協議都是無狀態協議。無狀態是指協議對於事務處理沒有忘記能力。缺少狀態意味着如果后續處理需要前面的信息,則必須重傳,這樣可能導致每次連接傳送的數據量增大。如果服務器不需要先前的信息,那么它的應答就比較快。
2.HTTP請求方法:
根據HTTP標准,HTTP請求可以使用多種請求方法。這里只重點介紹一下常用的GET和POST請求方法。
GET:請求指定的頁面信息,並返回實體主體
POST:向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立或已有資源的修改。
3.響應碼狀態
當瀏覽器接收並顯示網頁前,此網頁所在的服務器會返回一個包含HTTP狀態碼的信息頭(Server Header)用以響應瀏覽器的請求。
HTTP狀態碼共分為5種類型:
- 1** 信息,服務器收到請求,需要請求者繼續執行操作。
- 2** 成功,操作被成功接收並處理
- 3** 重定向,需要進一步的操作以完成請求
- 4** 客戶端錯誤,請求包含語法錯誤或無法完成的請求
- 5** 服務器錯誤,服務器在處理請求的過程中發生了錯誤
常見的狀態碼和狀態說明:
- 200 OK: 請求成功。一般用於GET與POST請求。
- 400 Bad Request: 客戶端請求有語法錯誤,不能被服務器所理解。
- 403 Forbidden: 服務器理解客戶端的請求,但是拒絕執行此請求。
- 404 Not Found: 服務器無法根據客戶端的請求找到資源。
- 500 Internal Server Error: 服務器內部錯誤,無法完成請求。
4.請求頭信息與響應頭信息
(1)請求頭信息
請求報頭允許客戶端向服務器傳遞請求的附加信息以及客戶端自身的信息。常用的請求報頭如下:
- Accept: 瀏覽器可以接受的MIME類型。
- Accept-Encoding: 瀏覽器能夠進行解碼的數據編碼方式,比如gzip
- Accept-Language: 瀏覽器所希望的語言種類,當服務器能夠提供一種以上的語言版本時會用到
- Connection: 表示是否需要持久連接。從HTTP/1.1起,默認都開啟了Keep-Alive,保持連接特性
- Host: 初始URL中的主機和端口,它通常是從HTTP URL中提取出來的
- User-Agent: 請求報頭域允許客戶端將它的操作系統、瀏覽器和其它屬性告訴服務器。
(2)響應頭信息
響應報頭允許服務器傳遞不能放在狀態行中的附加響應信息,以及關於服務器的信息和對Request-URI所標識的資源進行下一步訪問的信息。常用的響應報頭如下:
- Content-Type: 表示后面的文檔屬於哪種MIME類型
- Data: 當前的GMT(國際時)時間
- Server: 包含了服務器用來處理請求的軟件信息
X-Frame-Options: 用來給瀏覽器指示允許一個頁面可否在<frame> <iframe>或者<object>中展現的標記。網站可以使用此功能,來確保自己網站的內容沒有被嵌入到別人的網站中去,從而也避免了點擊劫持(click jacking)的攻擊。
JSON格式
JSON(JavaScript Object Notation,即JavaScript對象表示法) 是一種輕量級的數據交換格式。它獨立於放言和平台,JSON解析器和JSON庫支持不同的編程語言。JSON具有自我描述性,很容易理解。
JSON數據格式:
{ "errmsg": "", "g": [{ "type": "his_normal", "sa": "h_1", "q": "python xlib是什么" }] }
JSON語法是JavaScript對象表示法語法的子集:
- 數據在名稱/值對中
- 數據由逗號分隔
- 花括號保存對象
- 方括號保存數據
文章摘抄自蟲師大大的《web接口開發與自動化測試》。感覺蟲師把這些枯燥的內容介紹的淺顯易懂,讀完之后收獲良多。