瘋狂創客圈 經典圖書 : 《Netty Zookeeper Redis 高併發實戰》 面試必備 + 面試必備 + 面試必備 【博客園總入口 】javascript
瘋狂創客圈 經典圖書 : 《SpringCloud、Nginx高併發核心編程》 大廠必備 + 大廠必備 + 大廠必備 【博客園總入口 】html
入大廠+漲工資 必備的 高併發社羣: 【博客園總入口 】java
工欲善其事 必先利其器 |
---|
地表最強 開發環境: vagrant+java+springcloud+redis+zookeeper鏡像下載(&製做詳解) |
地表最強 熱部署:java SpringBoot SpringCloud 熱部署 熱加載 熱調試 |
地表最強 發請求工具(再見吧, PostMan ):IDEA HTTP Client(史上最全) |
地表最強 PPT 小工具: 屌炸天,像寫代碼同樣寫PPT |
無編程不創客,無編程不創客,一大波編程高手正在瘋狂創客圈交流、學習中! 找組織,GO |
推薦閱讀 |
---|
nacos 實戰(史上最全) |
sentinel (史上最全+入門教程) |
springcloud + webflux 高併發實戰 |
Webflux(史上最全) |
SpringCloud gateway (史上最全) |
無編程不創客,無編程不創客,一大波編程高手正在瘋狂創客圈交流、學習中! 找組織,GO |
(1)腳本化 mockweb
(2)免複製 token面試
..... 一大堆redis
總之,IDEA HTTP Client調試工具真是太好用了spring
之前用Postman的場景是這樣的:shell
實際遠遠不止這幾個文件夾來歸類多個產品線的接口,Postman的功能很是強大,可是面對如下這些情況時,我以爲調試一個接口太麻煩了 (這裏不討論工具的好壞,工具是幫助咱們提升效率的,每一個人的需求也不同,我只說明我我的遇到的一些狀況,不喜請勿噴)編程
IntelliJ IDEA 的 HTTP Client
工具恰好能解決上面提到的一些問題,json
官方的演示小動圖:
對於企業版, HTTP Client 是 IDEA 默認安裝,而且啓用的插件,具體以下:
看起來: 寶貝就在咱們電腦裏,只是沒有發現!
點擊菜單:Tools
— HTTP Client
— Test RESTful Web Service
接下來進入下面的界面:
填好 ip,端口, 路徑,點擊執行,能夠看到結果
是否是解決了常常idea和postman切換的問題,postman 就能夠扔掉了。
而後,這僅僅是 Http Client 組件使用的開始!!!!!!
!!!!!!
上圖的根據詳細的說明:
看到標題了嗎? 沒有錯,就是使用一個.http後綴(或.rest後綴)的文本文件,將可執行的Rest 接口和參數,統一管理起來, 組成一個Rest 接口可執行文件
Http Client 組件的牛逼之處,就是這個 :Rest 接口可執行文件
默認會建立一個名爲 rest-api.http
的文件,該文件被存儲在 用戶目錄的 Scratches 文件夾下。
接下來就能夠改rest-api.http
的文件中執行 Rest 接口, 效果以下:
經過菜單操做 File—New—HTTP Request
所文件存放在咱們指定的目錄下,就和咱們平時建立class/package是同樣同樣滴
直接建立一個擴展名爲 .http 或者 .rest 的普通文件,over
它能夠做爲項目文件,經過 Git 提交到倉庫,你們共享文件,共同維護接口請求數據,天然就不會出現調試別人接口還要導入他人數據的狀況啦
總之,就是方便 測試用例、測試參數、測試數據的 共享,明白了嗎?
請求的語法基本上和 http 協議內容是一致的,結構以下
### 使用三個 # 來分隔多個請求 GET/POST 請求地址(可拼接查詢參數) 請求頭鍵值對 請求體 > {% %} # 響應處理 # 使用 >符號 打頭,和 shell 很像,而後用 {% %} 括起來的腳本內容 # 在腳本中可使用 javascript 原生語法,這就很強大了 # 腳本中有幾個內置對象 client 表示當前客戶端,response 表示響應結果
對於 .http 文件中的一些簡單語法 :
//
或者 #
###
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
以 >
開頭,而後把腳本包裝在 {%%}
裏面。
GET https://example.com/status/200 > {% client.test("Request executed successfully", function() { client.assert(response.status === 200, "Response status is not 200"); }); %}
client.log("this is log");
經過 client.global.set
存儲全局變量,經過 client.global.get
獲取變量。能夠經過 client
對象在內存中存儲數據,能夠保留到 idea 關閉以前。
除了 get 獲取值外,還能夠經過變量獲取值,如圖:
那麼在一處存儲了變量, 就能夠在其餘地方調用了,很是適合處理 token,就有點像瀏覽器登陸了…
RestfulToolkit 一樣是個插件,在插件市場搜索安裝便可
安裝了這個插件後,打開側邊欄,項目的全部接口信息都會展示在此處:
我經常使用的功能就是把指定接口生成的JSON數據拷貝到 HTTP request 文件中,免去手寫的麻煩了,你說方便不?
項目中請求內容各有不一樣,IDEA標準提供的GET POST 請求案例可能還不能知足咱們的需求,這時咱們就能夠利用 Live Template 定製本身的模版,迅速生成request 內容,像這樣:
JSON Viewer是一款 Chrome瀏覽器插件,在瀏覽器 Omini-box 中輸入 json-viewer
+ Tab
, 粘貼json在此處,就能夠對json數據進行格式化了
打開開發者工具,在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 值 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--
對於返回信息亂碼我沒有碰到,也沒有設置網上說的消息頭和啓動配置,返回消息是正常編碼的;我只碰到了上傳上去的文件名是亂碼的,怎麼設置都不生效,沒找到解決辦法,但自測的話,取個英文名也不要緊,有哪位大神解決了能夠告訴我一下。
關於其它斷言的使用,和日誌的使用能夠找其它的博客,這裏列一篇以供參考