1. 程式人生 > >Idea rest client 使用(全) 真香

Idea rest client 使用(全) 真香

看了網上好多的 idea rest client 講解,大多都只是講了它如何如何好,都只是簡單的測了一個 json 的介面而已,個人實踐了一把,裡面還是有挺多坑的,但不得不說,那個指令碼化處理請求的功能確實挺棒。

指令碼化配置確實很方便,linux 使用檔案來配置環境變數代替了windows 的視覺化配置,sublime 使用檔案來配置它的所有配置項取代傳統的視覺化配置,這種檔案化的方式可以做到可遷移,多端即時同步和多人共享,有過經歷的人自然懂我在說什麼。

本文內容:

關於指令碼化 mock 的實踐,免複製 token 實踐,檔案傳輸實踐

關於語法

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

### 使用三個 # 來分隔多個請求
GET/POST 請求地址(可拼接查詢引數)
請求頭鍵值對

請求體

> {% %}

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

對於這個使用文件,我在官網沒有找到對應的文件位置,但在 idea 本身提供了一些不錯的使用示例,它的位置在 Tools/HTTP Client/Open HTTP Requests Collection

每傳送一個請求後,你可以在歷史記錄中找到它,idea 會為你儲存最近 50 條請求,儲存的是編譯後的請求,當你傳送的請求的響應結果和實際不符時,你可以在這裡找到問題的原因,它在專案的 .idea/httpRequests

資料夾中。

常用示例

配置環境資訊

這也是它比較強大的一方面,使用一個 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",
  }
}

登入 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--

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

關於其它斷言的使用,和日誌的使用可以找其它的部落格,這裡列一篇以供參考

https://www.cnblogs.com/zhixie/p/12059593.html

一點小推廣

創作不易,希望可以支援下我的開源軟體,及我的小工具,歡迎來 gitee 點星,fork ,提 bug 。

Excel 通用匯入匯出,支援 Excel 公式
部落格地址:https://blog.csdn.net/sanri1993/article/details/100601578
gitee:https://gitee.com/sanri/sanri-excel-poi

使用模板程式碼 ,從資料庫生成程式碼 ,及一些專案中經常可以用到的小工具
部落格地址:https://blog.csdn.net/sanri1993/article/details/98664034
gitee:https://gitee.com/sanri/sanri-tools-ma