IDEA HTTP Client(史上最全)


目錄:瘋狂創客圈 開發環境系列(打造一個 地表最強 環境)

工欲善其事 必先利其器
地表最強 開發環境: vagrant+java+springcloud+redis+zookeeper鏡像下載(&製作詳解)
地表最強 熱部署:java SpringBoot SpringCloud 熱部署 熱加載 熱調試
地表最強 發請求(去 PostMan ):IDEA HTTP Client(史上最全)
無編程不創客,瘋狂創客圈,一大波編程高手正在交流、學習中! 找組織,GO

IDEA HTTP Client 優點

IDEA HTTP Client調試工具真是太好用了

(1)腳本化 mock

(2)免複製 token

..... 一大堆

優點

IDEA HTTP Client調試工具真是太好用了

(1)腳本化 mock

(2)免複製 token

..... 一大堆

與Postman 的PK

以前用Postman的場景是這樣的:

img

實際遠遠不止這幾個文件夾來歸類多個產品線的接口,Postman的功能非常強大,但是面對以下這些狀況時,我覺得調試一個接口太麻煩了 (這裏不討論工具的好壞,工具是幫助我們提高效率的,每個人的需求也不一樣,我只說明我個人遇到的一些情況,不喜請勿噴)

  • 查找配置多數要通過鼠標點來點去, 與習慣文本和快捷鍵操作的便捷方式違背
  • 調試別人接口要導入他們的一些數據,比較麻煩
  • 多個產品線環境變量查看不直觀
  • 寫完接口要來回切換應用進行測試,比如(IDEA <——> Postman)
  • 快速定位接口比較麻煩
  • ......

IntelliJ IDEA 的 HTTP Client 工具剛好能解決上面提到的一些問題,

Http Client 驗處之旅

官方的演示小動圖:

img

對於企業版, HTTP Client 是 IDEA 默認安裝,並且啓用的插件,具體如下:

看起來: 寶貝就在我們電腦裏,只是沒有發現!

在這裏插入圖片描述

如果看不明白,那麼, 首先來驗一下處:

點擊菜單:ToolsHTTP ClientTest RESTful Web Service

在這裏插入圖片描述

接下來進入下面的界面:

在這裏插入圖片描述

填好 ip,端口, 路徑,點擊執行,可以看到結果

在這裏插入圖片描述

是不是解決了經常idea和postman切換的問題,postman 就可以扔掉了。

然後,這僅僅是 Http Client 組件使用的開始!!!!!!

!!!!!!

上圖的根據詳細的說明:

在這裏插入圖片描述

Rest 接口可執行文件

看到標題了嗎? 沒有錯,就是使用一個.http後綴(或.rest後綴)的文本文件,將可執行的Rest 接口和參數,統一管理起來, 組成一個Rest 接口可執行文件

Http Client 組件的牛逼之處,就是這個 :Rest 接口可執行文件

方式1: 通過工具按鈕創建

在這裏插入圖片描述

默認會創建一個名爲 rest-api.http 的文件,該文件被存儲在 用戶目錄的 Scratches 文件夾下。

接下來就可以改rest-api.http 的文件中執行 Rest 接口, 效果如下:

在這裏插入圖片描述

方式2:直接創建 HTTP request 文件

  • 史上最爲簡單的創建方式:

通過菜單操作 File—New—HTTP Request

在這裏插入圖片描述

所文件存放在我們指定的目錄下,就和我們平時創建class/package是一樣一樣滴

  • 史上最爲直接的創建方式:

直接創建一個擴展名爲 .http 或者 .rest 的普通文件,over

在這裏插入圖片描述

HTTP request 文件的最大優勢:

它可以作爲項目文件,通過 Git 提交到倉庫,大家共享文件,共同維護接口請求數據,自然就不會出現調試別人接口還要導入他人數據的情況啦

總之,就是方便 測試用例、測試參數、測試數據的 共享,明白了嗎?

Rest 接口可執行文件的接口語法

請求的語法基本上和 http 協議內容是一致的,結構如下

### 使用三個 # 來分隔多個請求

GET/POST 請求地址(可拼接查詢參數)
請求頭鍵值對

請求體

> {% %}

# 響應處理
# 使用 >符號 打頭,和 shell 很像,然後用 {% %} 括起來的腳本內容
# 在腳本中可以使用 javascript 原生語法,這就很強大了
# 腳本中有幾個內置對象 client 表示當前客戶端,response 表示響應結果

發送請求:

對於 .http 文件中的一些簡單語法 :

  1. 註釋 : // 或者 #
  2. 使用三個 # 號分割 request 請求 : ###
  3. web 的 basic 或者 digest 認證

eg: 普通請求體

POST http://example.com:8080/api/html/post
Content-Type: application/json 

{ "key" : "value", "list": [1, 2, 3] }

eg: 不添加執行日誌

// @no-log
GET example.com/api

eg: web 的 basic 或者 digest 認證

// Basic authentication
GET http://example.com
Authorization: Basic username password

###

// Digest authentication
GET http://example.com
Authorization: Digest username password

處理響應:

將腳本插入請求中

> 開頭,然後把腳本包裝在 {%%} 裏面。

斷言 client.assert

GET https://example.com/status/200

> {%
        client.test("Request executed successfully", function() {
        client.assert(response.status === 200, "Response status is not 200");
    });
%}

腳本日誌 client.log

client.log("this is log");

在這裏插入圖片描述

存儲變量

通過 client.global.set 存儲全局變量,通過 client.global.get 獲取變量。可以通過 client 對象在內存中存儲數據,可以保留到 idea 關閉之前。

除了 get 獲取值外,還可以通過變量獲取值,如圖:

在這裏插入圖片描述

那麼在一處存儲了變量, 就可以在其他地方調用了,非常適合處理 token,就有點像瀏覽器登錄了…

輔助功能說明

RestfulToolkit

RestfulToolkit 同樣是個插件,在插件市場搜索安裝即可

在這裏插入圖片描述

安裝了這個插件後,打開側邊欄,項目的所有接口信息都會展現在此處:

在這裏插入圖片描述

我常用的功能就是把指定接口生成的JSON數據拷貝到 HTTP request 文件中,免去手寫的麻煩了,你說方便不?

Live Template

項目中請求內容各有不同,IDEA標準提供的GET POST 請求案例可能還不能滿足我們的需求,這時我們就可以利用 Live Template 定製自己的模版,迅速生成request 內容,像這樣:

img

JSON Viewer

JSON Viewer是一款 Chrome瀏覽器插件,在瀏覽器 Omini-box 中輸入 json-viewer + Tab, 粘貼json在此處,就可以對json數據進行格式化了

img

打開開發者工具,在Network下雙擊某個HTTP請求,會自動在 new tab下格式化返回的json數據,免去了粘貼數據然後格式化的煩惱

常用示例

配置環境信息

這也是它比較強大的一方面,使用一個 json 來配置所有環境,只要在請求腳本目錄下就可以讀到,遵循約定大於配置的原則,文件名 http-client.env.json 表示普通變量可放的地方 http-client.private.env.json 表示密碼等私有變量配置的地方,配置大致如下。在運行請求腳本的時候,idea 會提示你要選哪個環境

{
  "local":{
    "baseUrl": "http://localhost:8083/",
    "checkCode": "http://localhost:8081/sanritools/company/token?env=dev",
  },
  "dev": {
    "baseUrl": "http://devhost:port/",
    "checkCode": "http://localhost:8081/sanritools/company/token?env=dev",
  },
  "sit": {
    "baseUrl": "http://sithost:port/",
    "checkCode": "http://localhost:8081/sanritools/company/token?env=sit",
  }
}

上面的文件,放在rest接口文件的同一個目錄下。

上面的文件, 定義了三個環境類型: sit, local,dev,執行的時候,需要選擇 環境 的 類型:

在這裏插入圖片描述

登錄 token 示例

網上的示例基本上都是在說,用一個接口獲取到 token ,然後保存到全局變量中,然後後面的接口就可以直接使用了,代碼如下,但是本人試了無數次都沒成功,再者,你們項目都沒驗證碼的嗎。

### 獲取 token 值
GET {{checkCode}}
Content-Type: application/json

> {%
client.global.set("token", response.body.token);
%}

### 獲取素材列表
POST {{baseUrl}}/media/list
Content-Type: application/json
Authorization: {{token}}

{
  "pageNo": 1,
  "pageSize": 10
}

上面這個是有問題的,返回值 response.body 其它是個 json 字符串並非 javascript 對象,需要解析一下,前面也說了,這裏可以使用原生 javascript 腳本,所以 JSON.parse(response.body).token 才能正確獲取到 token ,

第二個問題,我們現在這個 token 是存在 redis 的,所以我可以繞過驗證碼,另寫一個接口去 redis 直接獲取 token ,腳本最終如下

### 獲取 token 值
GET {{checkCode}}
Content-Type: application/json

> {%
client.global.set("token", JSON.parse(response.body).token);
%}

### 獲取素材列表
POST {{baseUrl}}/media/list
Content-Type: application/json
Authorization: {{token}}

{
  "pageNo": 1,
  "pageSize": 10
}

文件傳輸實踐

前面說了,輸入輸出和 shell 中很像,所以這裏輸入一個文件使用 < 文件地址,隨便找個 multipart/form-data 的數據格式查看一下,就知道文件怎麼傳了,其實在示例中也有,如下面腳本所示,它使用一個 boundary 的 key 綁定當前所要提交多個 part 的數據,每個 part 可以是不同的數據格式 ;

### 測試發送文件信息(文件元數據信息查詢)
POST {{baseUrl}}/media/upload/fileMetaData
Content-Type: multipart/form-data; boundary=WebAppBoundary
Authorization: {{token}}

--WebAppBoundary
Content-Disposition: form-data; name="fileSize"
Content-Type: application/json

1024
--WebAppBoundary
Content-Disposition: form-data; name="md5"
Content-Type: application/json

sdafasdfasfd
--WebAppBoundary
Content-Disposition: form-data; name="partFile"; filename="zhongwenbuxin.avi"
Content-Type: application/octet-stream

< C:\Users\091795960\Videos/V0106_1024KB.avi
--WebAppBoundary--

對於返回信息亂碼我沒有碰到,也沒有設置網上說的消息頭和啓動配置,返回消息是正常編碼的;我只碰到了上傳上去的文件名是亂碼的,怎麼設置都不生效,沒找到解決辦法,但自測的話,取個英文名也沒關係,有哪位大神解決了可以告訴我一下。

關於其它斷言的使用,和日誌的使用可以找其它的博客,這裏列一篇以供參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章