Stories

Detail Return Return

關於接口協議,你必須要知道這些! - Stories Detail

簡介

服務與服務之間傳遞數據包,往往會因為不同的應用場景,使用不同的通訊協議進行傳遞。比如網站的訪問,常常會使用 HTTP 協議進行傳遞,文件傳輸使用 FTP,郵件傳遞使用 SMTP。上述的三種類型的協議都處於網絡模型中的應用層。除了應用層的常用協議之外,對於傳輸層的 TCP、UDP 協議,以及 Restful 架構風格、RPC 協議等等基礎網絡知識要有一定的瞭解和認知。

網絡協議介紹

在瞭解具體的協議之前,需要先了解 OSI 七層模型、TCP/IP 四層模型、五層體系結構這三種不同的網絡模型。如圖是網絡協議模型對比圖。

image.png

  • OSI 參考模型是一個在制定協調進程間通信標準時所使用的概念性框架,它並不是一個標準。
  • TCP/IP 四層模型是網際網絡的基礎通信架構。常視為是簡化的七層 OSI 模型。
  • 五層協議是 OSI 和 TCP/IP 的綜合,實際應用還是 TCP/IP 的四層結構。
  • TCP/IP 協議棧是對應 TCP/IP 四層模型所使用的具體的網絡協議。

TCP 協議

TCP 協議是在傳輸層中,一種面向連接的、可靠的、基於字節流的傳輸層通信協議。TCP 協議的工作方式為在建立連接的時候需要進行“三次握手”,終止連接時需要進行“四次揮手”。“三次握手”和“四次揮手”是 TCP 協議的重要知識點,在後面的章節會通過實戰和理論結合具體介紹。

適用場景

TCP 協議的面向連接、錯誤重傳、擁塞控制等特性,適用於可靠性高的場景,比如涉及用户信息的數據傳輸。

UDP 協議

UDP 協議一旦把應用程序發給網絡層的數據發送出去,就不保留數據備份。它僅在 IP 數據包的頭部加入複用和數據校驗字段。所以 UDP 常常被認為是不可靠的數據包協議。

適用場景

UDP 協議的不需要提前建立連接、實現簡單的特性,非常適用於實時性高的場景,比如流媒體、在線遊戲等。

RPC 協議

RPC 的英文為 Remote Procedure Call ,它很好的詮釋了 RPC 協議的概念,即為以本地代碼調用的方式實現遠程執行,RPC 主要用於公司內部的服務調用。RPC 接口的優點在於傳輸效率更高、性能損耗更低、自帶負載均衡策略、更好的服務治理能力。

常見的 RPC 協議

目前在行業內常用的 RPC 協議主要如下:

  • Dubbo:Java 上的高性能 RPC 協議,Apache 開源項目,由阿里捐贈 底層應用層協議支持 Dubbo 缺省 TCP 協議、HTTP、Hessian、Thrift、gRPC 等。
  • gRPC:高性能通用 RPC 框架,基於 Protocol Buffers。
  • PB(Protocol Buffers):是一個語言中立、平台中立的數據序列化框架。Google 開源項目。
  • Thrift:與 gRPC 類似的多語言 RPC 框架,Apache 開源項目。
  • JSON-RPC:A light weight remote procedure call protocol. It is designed to be simple。

HTTP 協議

HTTP 協議是接口測試中最常見的協議,是用於分佈式、協作式和超媒體信息系統的應用層協議。HTTP 是萬維網的數據通信的基礎。客户端向服務端發送 HTTP 請求,服務端則會在響應中返回所請求的數據。在測試過程中,常常需要校驗請求和響應結果,所以瞭解 HTTP 協議,對於接口測試來説,是重中之重。

  • 請求
    • 請求行:method url protocol
    • 請求方法:GET、POST、PUT、DELETE、HEAD
    • 請求頭: Host Cookie User-Agent
    • 請求參數 query
    • 請求體:JSON XML FORM
  • 響應:
    • 響應狀態行
    • 響應頭
    • 響應體

URI 和 URL

  • URI,統一資源標識符,用來唯一的標識一個資源。
  • URL,統一資源定位符,它是一種具體的 URI
  • URL 結構:https://www.baidu.com/s?wd=霍格沃茲&rsv_spt=1
    1. 協議:http
    2. 域名:www.baidu.com
    3. 端口:跟在域名後面,域名和端口之間使用“:”作為分隔符,非必須,如果省略端口部分將採用默認端口
    4. 路徑:/s
    5. 請求參數:wd=霍格沃茲&rsv_spt=**1

HTTP 請求報文

image.png

> GET /uploads/user/avatar/31438/8216a3.jpg HTTP/1.1
> Host: ceshiren.com
> Accept-Encoding: deflate, gzip
> Connection: keep-alive
> Pragma: no-cache
> Cache-Control: no-cache
> User-Agent: Mozilla/5.0 
(Macintosh; Intel Mac OS X 10_15_0)
 AppleWebKit/537.36 
 (KHTML, like Gecko) 
 Chrome/80.0.3987.116 Safari/537.36
> Accept: image/webp,image/apng,image/*,*/*;q=0.8
> Referer: https://ceshiren.com/
> Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
> Cookie: user_id=xx;

_homeland_session=xx;
>

HTTP 響應報文

image.png

< HTTP/1.1 200 OK
< Server: nginx/1.10.2
< Date: Thu, 12 Mar 2020 09:13:44 GMT
< Content-Type: image/png
< Content-Length: 11390
< Connection: keep-alive

HTTP 響應狀態碼

  • 1xx 臨時響應,表示通知信息,請求收到了或正在進行處理
  • 2xx 表示成功,接受或知道了
    • 200 成功
  • 3xx 表示重定向,要完成請求還必須才去進一步的行動
    • 301 永久移動
    • 302 臨時移動
  • 4xx 表示客户端請求錯誤
    • 403 未授權
    • 404 未找到
  • 5xx 表示服務端錯誤
    • 500 服務器內部錯誤
    • 503 服務不可用

RESTful 架構

HTTP 基本行為代表意義

image.png

起源

Roy Thomas Fielding 博士於 2000 年在他的博士論文中提出來的一種萬維網軟件架構風格。其目的是為了便於不同的軟件在網絡中傳遞信息。RESTful 是基於 HTTP 協議之上制定的一種資源請求、操作的風格,用一句話來概括就是使用 URL 去定位資源,使用 HTTP 動詞描述操作。

HTTP 請求方法在 RESTful API 中的典型應用:

方法 意義
GET 獲取資源
POST 新增或者更新
PUT 更新資源
DELETE 刪除資源

注意: 不同公司在使用 RESTful 架構風格的時候存在部分差別。

get 與 post 區別

在日常的工作當中,HTTP 請求中使用最多的就是 GET 和 POST 這兩種請求方式.那麼掌握這兩種請求方式的原理,以及兩種請求方式的異同,也是之後做接口測試一個重要基礎。

  • 請求方法不同。
  • POST 可以附加 body,可以支持 Form、JSON、XML、Binary 等各種數據格式。
  • 從行業通用規範的角度來説,如果對數據庫不會產生數據變化的,比如查詢操作,建議使用 GET 請求,數據的寫入與狀態建議用 POST 請求。

image.png

總結

  • 網絡模型
  • 常見接口協議
  • HTTP 協議
  • RESTful 架構
user avatar hebendexiaomao Avatar chen_5ec331606ce75 Avatar
Favorites 2 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.