最近疫情在家,偶然間看到了這個idea 自帶的httpClient,發(fā)現(xiàn)對我很有用,主要是能保留參數(shù),于是自己研究了一番。畢竟我只研究了對我有用的,還有很多沒涉及到的,有需要的朋友自行到官網(wǎng)查看官方文檔
一、是否已安裝好插件
在Tools 下是否能找到Http Client,能找到,表示Idea已經(jīng)默認安裝,直接使用即可

如果找不到,則到File->Settings->Plugins->Marketplace下搜索Http Client進行安裝 、重啟即可

二、具體使用
2.1、打開方式1(文件存放在Scratches 文件夾)
關(guān)于方框里面的這種方式呢,提示已經(jīng)被廢棄,不使用

點開右邊的藍色字體 Convert request to the new format,進入到如下界面

默認會創(chuàng)建一個名為 rest-api.http 的文件,該文件被存儲在 Scratches 文件夾下,就是最左邊的方框里面,最右邊的小方框,點開會看到默認的一些模板,打開即可!


2.2、打開方式2(文件可以提交到git,推薦這種)
在項目中新建一個存放http文件的文件夾, 右鍵文件夾->File->New->HTTP Request (文件存放在我們指定的目錄下,通過 Git 提交到倉庫,大家共享文件,共同維護接口請求數(shù)據(jù),自然就不會出現(xiàn)調(diào)試別人接口還要導入他人數(shù)據(jù)的情況)

2.3、以項目實際為例
- 調(diào)用登錄接口,獲取Token,
- 通過登錄得到的Token來進行其他的接口請求(一個get,一個post)
2.3.1 登錄接口,獲取token
### Admin登錄接口
POST http://localhost:8081/admin/login
Content-Type: application/json
{
"mobile": "13888888888",
"password": "123456"
}

2.3.2根據(jù)Token,調(diào)用一個get請求的接口
###獲取租戶詳情
GET http://localhost:8081/admin/tenant/findById?id = 1231816358256214017
Authorization:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbkZyb21BcHBJZCI6IjExNDA4ODE5NzIxOTM5MTA3ODUiLCJ1c2VyTm8iOiIxMTQxMTY5MzI2NTYxMzI1MDU3IiwidGVuYW50SWQiOiIxMTQwOTE1OTI4Njc1MTE1MDEwIiwiZXhwIjoxNTgxOTA0MjkyfQ.EvJfL_f754jh7zcNhkWXjunxxgse73iE1TnKLILSbXs
Accept: application/json

2.3.3根據(jù)Token,調(diào)用一個post請求的接口
### 添加數(shù)據(jù)接口
POST http://localhost:8081/admin/tenant/add
Authorization:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbkZyb21BcHBJZCI6IjExNDA4ODE5NzIxOTM5MTA3ODUiLCJ1c2VyTm8iOiIxMTQxMTY5MzI2NTYxMzI1MDU3IiwidGVuYW50SWQiOiIxMTQwOTE1OTI4Njc1MTE1MDEwIiwiZXhwIjoxNTgxOTA0MjkyfQ.EvJfL_f754jh7zcNhkWXjunxxgse73iE1TnKLILSbXs
Content-Type: application/json
{
"userName": "httpClient",
"password": "123456",
"userMobile": "18780108964",
"name": "httpClient新增租戶",
"tenantMobile": "18780108694",
"logoAddress": "測試地址",
"typeId": 1231767150362939393,
"address": "demoData",
"wxMpOpen": 1,
"wxMpAppId": "demoData",
"wxMpSecret": "demoData",
"wxMpTmpId": "demoData"
}

2.4、上面的接口重構(gòu)
我們可以看到,2.3里面已經(jīng)基本可以發(fā)送請求了,但是一個項目中很多接口,如何快速生成參數(shù)?如何快速切換端口?如何讓登錄之后的每個請求自動攜帶Token?,所有這里進行一個重構(gòu),主要從以下兩個方面進行重構(gòu)
2.4.1環(huán)境變量
-
環(huán)境變量的概念
根據(jù)官方文檔知道,在項目內(nèi)部是可以創(chuàng)建以下兩個文件:
①rest-client.env.json(或http-client.env.json)是一個包含常規(guī)變量的普通文件。(該文件里可以定義用在整個項目上的所有常規(guī)變量)
②在rest-client.private.env.json(或http-client.private.env.json)是一個私有的文件,可能包括密碼、令牌、證書、其他敏感信息。默認情況下,此文件被添加到VCS的ignore文件列表中。在http-client.private.env.json文件中指定的變量的值將覆蓋環(huán)境文件中的值。因為它的優(yōu)先級最高
官方文檔兩個文件的定義 - 環(huán)境變量的定義
rest-client.env.json
{
"dev": {
"host": "localhost",
"port": 8081,
"mobile": "",
"password": "",
"tenant_id":1231816358256214017
},
"prd": {
"host": "test.com",
"port": 8082,
"mobile": "",
"password": ""
}
}
rest-client.private.env.json
{
"dev": {
"mobile": "132222222221",
"password": "123456"
},
"prd": {
"mobile": "135555443322",
"password": "123456"
}
}
-
環(huán)境變量的具體使用
我們在環(huán)境變量中定義了一個dev和一個prd,在運行接口的時候,直接選擇運行哪個環(huán)境即可
image.png
選dev開發(fā)環(huán)境,運行結(jié)果如下

url中參數(shù)id的值放在環(huán)境變量文件中的

2.4.2 response handler 腳本
- 腳本的方式
①直接引用(就地插入腳本,在腳本前面加上>并將其包含在{% %})
GET host/api/test
> {%
// Response Handler Script
...
%}
②外部文件方式(外部文件插入腳本,在腳本前添加>外部文件路徑)
GET host/api/test
> scripts/my-script.js
HTTP Response Handler 庫公開的兩個對象介紹(具體的使用方法請看官方鏈接)
① client對象存儲會話元數(shù)據(jù),可以在腳本內(nèi)部對其進行修改。該client直到關(guān)閉IntelliJ IDEA的狀態(tài)保存。保存client.global的每個變量 variable_name 都可以通過后續(xù)的HTTP請求訪問{{variable_name}}。
② response 包含有關(guān)已接收響應的信息:其內(nèi)容類型,狀態(tài),響應正文等。腳本的具體使用
將獲取到的token設置到全部變量中

代碼如下:
### Tenant登錄接口
POST http://{{host}}:{{port}}/tenant/login
Content-Type: application/json
{
"mobile": "13666666666",
"password": "123456"
}
> {% client.global.set("auth_token",response.body.result.token)
%}
使用剛才的全局變量值:注意系統(tǒng)給的模板是這樣子的Authorization: Bearer {{auth_token}},但是我沒成功,最后我去掉了Bearer和那個空格才OK

三、Live Template
可以看到在這里會提示使用模板變量進行快速生成

這是系統(tǒng)默認的一些模板,如果不合適自己,可以按照我的另外一篇文章,進行自定義

四、遇到的問題
-
識別不到環(huán)境變量
是因為配置環(huán)境變量的文件rest-client.private.env.json位置沒放正確,不能放到Scratches中,我理解的是放到和pom.xml同一層目錄即可
image.png -
Authorization老是提示token無效
原因一:用了系統(tǒng)自帶的模板,有Bearer
原因二:在去掉了Bearer之后,:和{{auth_token}}之間留了一個空格
(正確應該去掉空格Authorization:{{auth_token}})
image.png POST請求提示500錯誤,但是又沒進入到接口當中
是因為我把Content-Type: application/json中的Content-Type不知道怎么寫成了Accept
POST http://{{host}}:{{port}}/admin/tenant/enableLiveBroadcast
Authorization:{{auth_token}}
Content-Type: application/json
{
"id": 1228230930170372097,
"enableLiveBroadcast": 1
}



