Visual Studio - API調試與測試工具之HTTP文件
后端開發,我們對于Api接口調試測試大致有以下方法:單元測試、Swagger、Postman。
但是每種方式也都有其局限性,幾年前使用Visual Studio Code開發過一段時間,接觸了REST Client擴展工具印象特別深刻,簡單、輕量、可編碼、與開發工具無縫銜接,整體效率相當高。

再此之后我一直在關注Visual Studio是否有類似的工具,直到最近發現Visual Studio 2022版本17.8開始支持類似REST Client擴展工具相關功能了,雖然功能還不夠完善但是也基本夠用了。
今天和大家分享怎么通過.http文件便捷調試測試Api接口。

01、.http文件創建方式
.http文件有兩種創建方式:其一為通過添加文件,其二為通過終結點資源管理器生成。
1、添加文件方式
就像平時添加類文件一樣,通過選擇類庫右擊選擇添加,選擇新建項,然后找到HTTP文件選項,可以修改名稱最后點擊添加按鈕即可。

2、終結點資源管理器生成方式
首先選擇視圖菜單,找到其他窗口,然后找到終結點資源管理器并點擊,即可打開。

打開后效果如下:

然后我們可以任意選擇一個接口,右擊按鈕并點擊生成請求,即可自動創建.http文件并自動生成當前接口的默認請求示例,如下圖:

02、.http 文件語法
1、請求
HTTP請求格式為[HTTPMethod URL HTTPVersion]。
HTTPMethod: 表示HTTP方法包括增刪改查四大常見方法:GET、POST、PUT、DELETE,以及一些其他HTTP方法OPTIONS、HEAD、PATCH、TRACE、CONNECT;
URL: 表示發送請求的URL,即請求目標URL,像正常方法URL一樣可以包含查詢字符串參數;
HTTPVersion: 此項為可選項,是指應用的HTTP版本,即 HTTP/1.1、HTTP/2 或 HTTP/3。
當然一個.http文件中可以包含多個請求,可以通過###作為分隔符把多個請求分開
POST https://localhost:5137/orders
###
GET https://localhost:5137/orders?id=98006
###
DELETE https://localhost:5137/orders HTTP/3
###
2、請求頭、請求體
在實際請求中,我們不單單要指定請求方法,請求URL,還需要指定請求頭以及請求體。
常見的請求有請求內容類型、響應內容類型、編碼方式、緩存控制、內容類型、身份驗證、跨域請求等等。
請求頭格式為[HeaderName: Value],一個請求頭類型占一行,可以有多個請求頭,并且每個請求頭之間不能有空白行,請求頭和請求行之間也不能有空白行。
GET https://localhost:5137/orders
Accept: application/json, text/html
###
GET https://localhost:5137/orders
Cache-Control: max-age=604800
Age: 100
###
請求體是指HTTP請求中攜帶的實際數據,在請求行或者請求頭后空白行之后添加,示例如下:
GET https://localhost:5137/orders
Content-Type: application/json
{
"id": "897",
"date": "2024-12-24",
"price": 5,
"priceF": 2,
"name": "小紅",
"status": "Pending"
}
###
3、注釋、變量
注釋是以#或//開頭的行,可以加強代碼的可讀性。
變量是以@開頭的行,其語法格式為[@VariableName=Value],定義好變量后可以通過雙大括號{{ VariableName }}來使用變量,同時也可以使用已經定義好的變量來定義新的變量。
@hostname=localhost
@port=5137
@host={{hostname}}:{{port}}
GET https://{{host}}/orders?id=98006
4、環境文件
在實際開發過程中,針對開發環境、測試環境,甚至生產環境,我們需要對同一個變量提供不同的值,比如不同環境首先域名就不同,其次針對不同環境的測試數據也不同。
這時候我們就可以使用環境文件,我們可以在.http文件所在的目錄中或者其父目錄中創建名為http-client.env.json的文件。如下代碼,我們創建了開發環境和生產環境兩個不同的域名。
{
"dev": {
"HostAddress": "http://localhost:5137"
},
"pro": {
"HostAddress": "http://localhost:8888"
}
}
此時我們可以在.http文件窗口右上角進行切換不同環境。

下面我們選擇pro環境進行測試一下,結果如下。

可以看到此時域名讀取了正式環境域名。
此時我們是可以把環境文件提交到代碼庫中和團隊共享測試變量,那如果有些敏感的數據我們并不想提交到代碼庫和別人分享要怎么辦呢?
我們可以在環境文件同級目錄中創建http-client.env.json.user文件,它和環境文件編寫規則完全一樣,只是優先級比環境文件優先級更高。當然我們需要在代碼管理的忽略文件.gitignore排查.user后綴的文件,防止其被意外提交至代碼塊。
03、身份驗證
可以說我們的每個后端接口都有相關認證授權,可能使用Jwt,OAuth令牌,API密鑰,用戶密碼等方式,這就導致我們平時測試的時候,需要先登錄,然后拿到相關的認證憑證,再去調相關的接口。
這意味這我們面臨一種情況,調用B接口需要依賴A接口的返回結果。首先答案很明確可以做到,要怎么做呢?
我們可以在A接口請求上面使用以下語法[# @name VariableName],來定義承載接口返回結果變量。
下面我們實現一個登錄接口,直接返回Jwt憑證即token字符串,然后使用這個token請求查詢訂單接口。
//登錄
# @name login
POST {{Web_HostAddress}}/login
Accept: application/json
###
//查詢訂單
@id=897
GET {{Web_HostAddress}}/orders?id={{id}}
Authorization: Bearer {{login.response.body.$.[0]}}
###
需要注意的是,因為我們登錄即可是直接返回的字符串,所以這里使用的是login.response.body.$.[0],如果我們返回的是對象并且token是賦值在token字段上的,則應該使用login.response.body.$.token。

并且當我們點擊查詢訂單接口請求上面的調試時,即使我們程序沒有運行起來,它也會自動運行,并且也會自動去執行登錄接口,拿到它所需的token,然后運行自身。
而發送請求按鈕就必須要求程序運行起來以后才能生效。
到這里.http文件使用就介紹完了,可以說基本夠用了,當然還有很多地方需要完善的,比如說上傳文件,終結點資源管理器不能直接自動生成請求體結構等等,相信要不了多久這些功能就會完善起來的,安心等待即可。
注:測試方法代碼以及示例源碼都已經上傳至代碼庫,有興趣的可以看看。https://gitee.com/hugogoos/Planner

浙公網安備 33010602011771號