0. 概述
在正式开始使用 jetbrain HTTP 调试工具之前,我都是通过 Postman 进行 API 的调试和测试的,但是,自从换过来之后,我就相见恨晚了,所以,今天我准备向你介绍一下它。
1. Postman 有什么问题
放弃一款语言或者放弃一个工具总是有其原因的,有些并不是因为你不好,而是因为你不够好;有些真的是因为你不好,例如我会放弃 postman 自然有一些我嫌弃的地方,以下都为个人观点,可能受个人了解局限影响,如有错误,还请指出:
- API 管理不方便:在我使用 Postman 的时候,他的 API 管理还只有一层,也就是一个目录,然后在这个目录中放置相关的所有 API
- 不支持代码处理:例如对登录的 API 获取登录成功的 token,并且用于其他 API 中
2. 为什么是 jetbrain http 工具
对于 Postman 的不便之处,当然不是致命伤,但是,当我使用 Jetbrains 系列的 IDE 的时候,再加上我体验了 Jetbrains 的 HTTP 工具之后,这便成了我放弃 Postman 的理由。
这里我推荐 Jetbrains 的 HTTP 工具的原因有:
- 环境配置即文件:你可以用同样的 API 测试不同的环境
- 支持版本控制:你可以将你的 API 测试放在代码目录中,并且用版本管理起来
- 支持代码处理:你可以对 API 的响应进行 JS 代码处理(又是 JS),并且在全局作用域存放数据用于多个 API 之间交换
3. 简单示例
下面,我就先来个最简单的 API 测试:
图 1:简单使用说明 |
---|
这里你直接点击左边的 ”开始“ 按钮即可发送请求,然后你就可以在状态栏上看到响应了:
图 2:简单使用响应 |
---|
这是只带 HTTP 请求头的,下面来一个带 HTTP 请求体的例子:
图 3:http 请求体示例 |
---|
同样的,也是点击 ”开始“ 按钮即可,然后在状态栏中也可以看到输出了:
图 4:带请求体的响应 |
---|
4. 高级应用
前面说了,Jetbrains 的 API 工具还可以进行一个响应处理,例如,我们的 API 都是有 token 限制的,所以在用 API 之前都是需要先进行获取 token。这里我的操作是,在登录 API 中,用 JS 处理一下,将 token 保存到全局作用域中,然后,再调用其他 API 的时候使用:
图 5:登录 API |
---|
这里我使用了两个特性,分别是:
- 全局配置 host:通过配置不同的 host,我可以随时在不同的环境之间进行 API 调用切换
- 响应处理:下面的 js 代码,我提取了响应体中的 token 字段,并存放在全局作用域中
接着,我就在调用其他 api 的时候使用这个 token 变量:
图 6:使用全局变量 |
---|
OK,就是这么简单,一个双层的花括号即可。这里你可能会有点不爽的是,为什么要直接写 js,我引用 js 文件可以吗?是的,我做过不少类似的实践,例如我有一些 e2e 测试是通过这一套工具来写的,因为是 e2e 测试,所以 js 的代码量不少,内嵌肯定不行,所以我就抽出了一个个 js 文件,然后引用到这里,类似于:
图 7:引用 js 文件 |
---|
当你写了很多 API 的时候,你可以直接一键顺序从上到下运行这个 API,并且可以进行一个断言,从而实现 e2e 测试的目的:
图 8:断言示例 |
---|
这就是一个简单的示例使用。
5. 其他规则
5.1 为什么我没看到 ”开始“ 按钮
可能到这里,还是有同学是蒙的,为什么我写了一行:POST http://192.168.{{host}}/api/v3/sessions
,并没有显示左边的 ”开始“ 按钮?这里是有一个 jetbrains 工具的默认规则,你用 .rest
或者 .http
后缀结尾的文件它都认为是 http 请求文件,都会去解析是否有 API 调用,所以,你需要确保你的文件名的后缀是 “.http” 或者 “.rest”。
5.2 为什么的 {{host}} 变量没有效果
在 Jetbrains 中,你需要用一个配置文件来配置这个变量,或者使用内置的变量,这里有 3 种类型:
- 通过配置文件配置,配置文件名字需要固定为以下两个中的任意一个,位置就放在 http 文件的同一层目录,或者项目的根目录:
- http-client.env.json
- http-client.private.env.json
- 内置变量,默认只有 3 个
- $uuid: generates a universally unique identifier (UUID-v4)
- $timestamp: generates the current UNIX timestamp
- $randomInt: generates a random integer between 0 and 1000.
- eg:
GET http://localhost/api/get?id={{$uuid}}
- 自定义变量
- 类似于我在前面保存 token 的做法
client.global.set
- 类似于我在前面保存 token 的做法
5.3 我的 API 需要使用代理
没问题,HTTP 工具的代理使用的是 Jetbrains 的系统代理,你可以打开 “配置” 窗口,查看:
图 9:http 工具代理配置 |
---|
5.4 更多 QA
请留言