接口相關概念介紹


接口概念

關於接口的概念,根據個人的理解和認識大致把接口分為兩類:程序接口和協議接口。

程序接口:

  關於程序接口,也可以看作是程序模塊接口,具體到程序中一般就是提供了輸入輸出的類、方法或函數。對於程序接口的測試,一般需要使用與開發程序接口相同的編程語言。通過傳入不同的參數,來驗證程序接口的功能。

協議接口

  關於協議接口,一般指系統通過不同的協議來提供的接口,例如HTTP/SOAP協議等。這種類型接口對底層代碼做了封裝,通過協議的方式對外提供調用。因為不涉及程序層面,所以不受編程語言的限制:我們可以通過其它編程語言和工具進行測試。

接口分類

接口大體分為以下三類:

1、系統與系統之間的接口

 系統與系統之間的接口,這里可以是公司內部不同系統之間的接口調用,也可以是不同公司之間系統接口的調用;例如:微博、微信、QQ提供的第三方登錄。

2、下層服務對上層服務的接口

 應用層      :從認識上可以看成是系統所提供的UI層功能,對於Web系統來說,可以認為是瀏覽器頁面上所提供的功能:登錄、注冊、查詢、刪除等。

 Service層 :可以理解為服務器所提供數據和邏輯的處理。

 DB層        :數據庫主要用來存放數據,例如用戶的個人信息、商品的信息等。

訪問對象  :  它是一個面向對象的數據庫訪問接口。

  舉例來說各層的工作過程:首先Service提供了一個查詢接口--->這個接口需要一個參數(查詢的關鍵字)--->然后應用層提供了一個輸入框,需要用戶輸入查詢關鍵字,並且還提供了一個查詢按鈕用於提交查詢的關鍵字。當用戶輸入查詢關鍵字並點擊提交按鈕后,相當於調用的查詢接口,查詢接口需要對用戶提交的關鍵字做出相應的判斷,是否為空?然后通過DAO層調用數據庫,根據關鍵字查詢表中的數據,最后再將拿到的數據返回給應用層,應用層負責將數據展示到Web頁面上。

     在這個過程中,各層之間的交互就是通過接口,應用層與Service主要通過HTTTP接口。Service層與DB層主要通過DAO(Data Access Object)數據庫訪問接口。Python與MySQL之間調用,pymysql驅動就扮演着這樣的角色。

3、系統內服務與服務之間的調用

系統內部,服務與服務之間的調用,大多情況下是程序之間的調用。本質就是:程序開發的函數或類方法,提供入參與返回值;

 為什么要對接口進行測試?

1 更早的發現問題

  測試應該更早的介入到項目開發中,因為越早的發現bug,修復成本越低。然而功能測試必須要等到系統提供可測試的界面才能對系統進行測試。然而接口測試可以在功能界面開發出來之前對系統進行測試,系統接口是上層功能的基礎,接口測試可以更早更低成本的發現和解決問題。

2 縮短產品研發周期

  對於產品研發周期來說,如果將所有測試工作都集中在功能測試階段,那么測試的問題和修復周期就會變長,因為測試可以更早的介入產品開發中,可以有效的控制功能階段bug數量,從而有效的縮短產品開發周期。

3 發現更底層的問題

  系統的有些底層邏輯是在UI功能測試中不太容易觸發的,那么這些邏輯可能會存在問題。接口測試可以更容易更全面的測試到這些底層的邏輯。

4 檢查服務器的異常處理能力

  我們通常把前端的驗證稱為弱驗證,因為它很容易被繞過,這個時候如果只站在功能的層面進行測試,很難發現一些安全的問題。接口測試就會很容易驗證這些異常情況。

 Web接口

前后端分離是近年來Web應用開發的發展趨勢。這種模式有如下優勢:

1、 后端可以不用必須精通前端技術(HTML/JavaScript/CSS) , 只專注於數據的處理, 對外提供 API 接口。
2、 前端的專業性越來越高, 通過 API 接口獲取數據, 從而專注於頁面的設計。
3、 前后端分離增加接口的應用范圍, 開發的接口可以應用到 Web 頁面上, 也可以應用到移動 APP 上。 
在這種前后端分離的開發模式下,接口測試的工作就會變得尤為重要。

HTTP協議與JSON

在正確開發 Web 接口之前先來簡單介紹一下 HTTP 協議和 Json 數據格式。 在當前 Web 接口開發中應用
最普遍的就是 HTTP 協議, 而 Json 是目前非常流行接口數據傳輸格式之一。
HTTP協議

  超文本傳輸協議是互聯網上應用最為廣泛的一種網絡協議。

  HTTP協議的主要特點概況如下:

  1、支持客戶/服務器模式

     簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、POST。每種方法規定客戶與服務器聯系的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度非常快。

  2、靈活    : HTTP允許傳輸任意類型的數據對象,正在傳輸的類型有Content-Type加以標記。

  3、無連接 : 無連接的含義是限制每次連接只處理一個請求。服務器處理完成客戶的請求,並收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。

  4、無狀態 : HTTP協議是無狀態的協議,無狀態是指協議對應事務處理沒有記憶能力,缺少狀態意味着如果后續處理需要前面的信息,則它必須重傳。這樣可能導致每次連接傳送的數據量增大,另一方面,在服務器不需要先前信息時它的應答就較快。

HTTP請求類型

  請求行以一個方法符號開頭,以空格分開,后面跟着請求的URL和協議的版本,格式如下:MethodRequest-URL HTTP-Version CRLF ,其中Method表示請求方法:Request-URL是一個統一資源標識符:HTTP-Version表示請求的HTTP協議版本:CRLF表示回車和換行(除了作為結尾的CRLF外,不允許出現單獨的CR或LF字符)

 請求方法,各種方法的解釋如下:

響應狀態碼:

狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:

1xx   :    表示請求已接收,繼續處理 ;

2xx  :   成功--表示請求已被成功接收、理解、接受 ;

3xx   :   重定向--要完成請求必須進行更進一步的操作;

4xx   :  客戶端錯誤--請求有語錯誤或請求無法實現    ;

5xx   :  服務器端錯誤--服務器未能實現合法的請求    ;

常見狀態代碼、狀態說明:

200   OK                         // 客戶端請求成功

400   Bad Request       //  客戶端請求有語法錯誤,不能被服務器理解

401   Unauthorized        //   請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用

403   Forbidden            //    服務器收到的請求,但是拒絕提供服務

404   Not Found          // 請求資源不存在,輸入錯誤的URL

500   Internal Server Error //服務器發生不可預期的錯誤

503   Server Unavailable   // 服務器當前不能出來客戶端的請求,一段時間后可能恢復正常

請求頭信息與相應頭信息:

 請求頭信息

   請求報頭允許客戶端向服務器端傳遞請求的附加信息以及客戶端自身的信息。

常用的請求報頭:
Accept: 請求報頭域用於指定客戶端接受哪些類型的信息:image/gif:*/*, 表明客戶端希望接GIF圖像格式的資源;Accept:text/html,表示客戶端希望接口html文本。

Accept-Encoding: 請求報頭域類似於 Accept, 但是它是用於指定可接受的內容編碼。

Accept-Language: 請求報頭域類似於 Accept, 但是它是用於指定一種自然語言。 

Connection: 允許發送指定連接的選項。 例如指定連接是連續, 或者指定“close” 選項, 通知服務器,在響應完成后, 關閉連接。 從 HTTP/1.1 起, 默認都開啟了 Keep-Alive, 保持連接特性。

Host(發送請求時, 該報頭域是必需的) , Host 請求報頭域主要用於指定被請求資源的 Internet 主機和端口號, 它通常從 HTTP URL 中提取出來的 。

User-Agent 請求報頭域允許客戶端將它的操作系統、 瀏覽器和其它屬性告訴服務器。 不過, 這個報頭域不是必需的, 如果我們自己編寫一個瀏覽器, 不使用 User-Agent 請求報頭域, 那么服務器端就無法得知我們的信息了 。

響應頭信息

  響應報頭允許服務器傳遞不能放在狀態行中的附加響應信息, 以及關於服務器的信息和對 Request-URI所標識的資源進行下一步訪問的信息。

常用的響應報頭

Location: 響應報頭域用於重定向接受者到一個新的位置。 Location 響應報頭域常用在更換域名的時候。

Server: 響應報頭域包含了服務器用來處理請求的軟件信息。 與 User-Agent 請求報頭域是相對應的。 

WWW-Authenticate: 響應報頭域必須被包含在 401(未授權的) 響應消息中, 客戶端收到 401 響應消息時候, 並發送 Authorization 報頭域請求服務器對其進行驗證時, 服務端響應報頭就包含該報頭域。

X-Frame-Options: 有三個值: DENY 表示該頁面不允許在 frame 中展示, 即便是在相同域名的頁面中嵌套也不允許。 SAMEORIGIN 表示該頁面可以在相同域名頁面的 frame 中展示。

ALLOW-FROM uri 表示該頁面可以在指定來源的 frame 中展示。

json

 JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,易於人閱讀和編寫。

{"Success":0,"Msg":"","Obj":{"AgentVerify":true,"BuildVerify":true,"ShHouseVerify":true,"RHouseVerify":true},"ExtendObj":null}

什么是Web接口

 接口只關心數據,它的輸入和輸出是具有一定格式的數據,接口並不關心數據展示在哪里,要以什么樣式去展示。而HTML、CSS、JavaScript等關心的是數據展示在哪里,如何展示。

Web接口:https://cnodejs.org/api/v1/topics

返回json數據

 


免責聲明!

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



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