看了网上好多的 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-maven

Idea rest client 使用(全) 真香的更多相关文章

  1. 从Eclipse切换到IDEA工具,哎~真香!

    从Eclipse切换到IDEA工具,哎~真香!(图) 个人观点:IDEA工具用了就回不去了!!!对比很多人写,我就不赘述了.我在这里主要介绍一下IDEA工具的一些使用上的技巧,毕竟我开始学习java的 ...

  2. 我把公司 10 年老系统改造 Maven,真香!!

    公司有几个老古董项目,应该是 10 年前开发的了,有一个是 JSP + Servlet,有一个还用的 SSH 框架,打包用的 Ant,是有多老啊,我想在座的各位很多都没听过吧. 为了持续集成.持续部署 ...

  3. 我在苦苦坚持的时候,WebStorm已经悄悄的“真香”起来

    前言 最近接了一个活儿,是用WebStorm开发一个基于VUE的网站,但是我真的是几乎没接触过VUE相关的项目实践,更别说用WebStorm在实际中的应用,之前只是听朋友说多好用,但是,因为现有工具不 ...

  4. 【托业】【全真题库】TEST01-03-阅读题

    [托业][全真题库]TEST01-03-阅读题

  5. git 日常使用从入门到真香

    目录 git 日常使用从入门到真香 一.Git简介 二.Git常用命令 三.git操作流程 四.报错处理 git 日常使用从入门到真香 一.Git简介 Git是一个开源的分布式版本控制系统,可以有效. ...

  6. PMP全真模拟题真题試題含答案解析 2019年下半年PMP考試适用 PMP中文文对照试题 【香港台灣地區PMP考試也可用】

    PMP全真模拟题真题试题 含答案解析 2019年下半年PMP考试适用 PMP中文文对照试题 [香港台灣地區PMP考試也可用]PMP全真模擬題真題試題 含答案解析 2019年下半年PMP考試适用 PMP ...

  7. 真香系列之 Golang 升级

    Golang 以前的依赖管理一直饱受诟病,社区的方案也层出不穷,比如 vendor, glide, godep 等.之前的依赖管理一直是依靠 GOPATH 或者将依赖代码下载到本地,这种方式都有劣势. ...

  8. 真香的flex弹性布局

    如何实现一个左中右的布局 在flex出现之前 #box{ color: white; } #left{ float: left; width: 30%; background-color: red; ...

  9. Chladni Figure CodeForces - 1162D (暴力,真香啊~)

    Chladni Figure CodeForces - 1162D Inaka has a disc, the circumference of which is nn units. The circ ...

随机推荐

  1. Hackintosh Issues 10.13.x

    Issuses 1: 出现禁行: (-v:) allcating 0x800 pages at 0x2000000 alloc type 2 Load kernal from stream Load ...

  2. mysql之case..when ..then..else..end as..用法

    1.示例1 查询1: SELECT CASE main_xm_sam31 WHEN '02' THEN 2 ELSE 1 END AS SPDJ FROM SR_MAIN_BG A WHERE A.P ...

  3. os 和shutil模块的使用方法

    1.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件 ...

  4. 【C语言】用C语言输出“心形”图案

    在你们的世界里,是不是觉得程序猿一点浪漫都不懂?其实不是的,程序猿的世界也是很浪漫滴! 傻瓜版 int main() { printf("❤"); ; } 高级版 //版本一:单个 ...

  5. 安装k8s出现 Failed to list *api.Node: Get http://192.168.144.131:8080...: dial tcp 192.168.144.131:8080: getsockopt: no route to

    原因是master主机的防火墙没关,导致无法访问主机的8080端口,解决方法暂时关闭主机上的防火墙. * centos6 : service iptables stop * centos7 : sys ...

  6. webpack 打包增加版本信息

    What do we need? 笔者目的是在vue项目打包后的 dist/index.html 文件中写入本次打包git用户.最后一次git提交信息,这样做的目的是便于线上项目的管理和防止同事之间的 ...

  7. extern "C" 与函数重载

    前言 如果向要在一个文件中使用另一个文件中的变量,不能在头文件中定义全局变量,因为被多个文件包含后会导致编译出错,并且静态的static变量,只能在本文件内使用,这时候就可以使用extern关键字. ...

  8. AcWing 854. Floyd求最短路 多源 邻接矩阵

    //不存在负权回路 //边权可能为负数 #include <cstring> #include <iostream> #include <algorithm> us ...

  9. Java进阶学习(5)之设计原则(上)

    设计原则 城堡游戏 扩展 字符串被分割 String line = in.nextLine(); String[] words = line.split(" "); 消除代码复制 ...

  10. PHP导出身份证号科学计数法

    最近在做PHP的数据导入和导出,到处身份证号的时候,直接变成了科学计算法,找了一个很简单的方法就是这样 $obj= " ".$v['idcard']; 但是这样有空格啊,网上搜了一 ...