第一章为什么要丢掉 Postman很多团队在协作时经常面临这样的场景A 开发了一个接口需要把 Postman 的调用截图或者导出的 JSON 文件发给 B。B 拿到后还要导入如果环境不同还得手动改配置。这种体验非常不“开发友好”。IDEA REST Client 带来的是一种“文件即服务”的理念。1.1 核心优势与工程共存HTTP 请求脚本.http 文件可以直接放在项目目录下随 Git 一起提交。这意味着新成员拉下代码后不仅能看代码还能立刻看到所有的接口调用用例一键运行。告别上下文切换在 Controller 层写代码时如果突然想测试接口只需要在旁边的 .http 文件中写一个请求无需切屏。脚本化与自动化它不仅仅是点一下“Send”它支持编写响应脚本Response Handler可以断言、可以提取变量给后续请求用甚至可以将其作为轻量级自动化测试工具。接下来我们将一步步揭开它的面纱。第二章基础入门——3 分钟上手如果你还不知道怎么打开它下面是最常用的两种方式。2.1 两种启动姿势方式一临时控制台这是最像 Postman 的操作方式。依次点击Tools-HTTP Client-Test RESTFUL Web Service。打开后你会看到一个图形化界面可以选择 Method、填写参数、Headers、Body。这对于偶尔用一下或者不熟悉语法的用户非常友好。方式二.http 文件推荐核心玩法这才是 IDEA REST Client 的灵魂。在项目任意位置推荐放在项目根目录的api/或者doc/文件夹下右键New-File创建一个以.http或.rest结尾的文件。2.2 第一个请求打开新建的test.http文件输入以下内容http### 这是一个测试GET请求 GET https://api.github.com/users/octocat Accept: application/json你会看到编辑器侧边栏有一个绿色的三角形图标。点击它请求就会发送。响应结果会直接显示在 IDEA 下方的 “Run” 工具窗口中。就是这么简单。无需复杂的界面配置纯文本可追溯可版本控制。第三章.http 文件语法详解.http 文件的语法非常直观遵循 HTTP 协议的标准格式。3.1 请求结构一个完整的请求块由以下几个部分组成请求分隔符###。用于分割不同的请求相当于 Postman 里的多个 Tab。请求行HTTP方法 URL。请求头键: 值每个头单独占一行。请求体空一行后写入 Body 内容。http### 1. 这是一个POST请求示例 POST https://jsonplaceholder.typicode.com/posts Content-Type: application/json User-Agent: IntelliJ HTTP Client { title: foo, body: bar, userId: 1 } ### 2. 这是一个GET请求获取刚才创建的资源 GET https://jsonplaceholder.typicode.com/posts/13.2 注释可以使用#或//在 .http 文件中添加注释。http# 这个请求用于获取用户信息 GET https://api.example.com/user/1第四章环境管理——像 Maven Profile 一样切换环境这是让 IDEA REST Client 超越 Postman 的关键功能。我们在开发中通常有dev开发、test测试、prod生产环境每个环境的baseUrl和数据库配置都不同。4.1 定义环境变量你需要在与.http文件同级的目录下或项目根目录创建一个http-client.env.json文件。json{ dev: { baseUrl: http://localhost:8080, username: admin_dev, password: 123456 }, prod: { baseUrl: https://api.example.com, username: admin_prod, password: 复杂密码 } }4.2 处理敏感信息如果密码不想提交到 Git 仓库可以创建http-client.private.env.json。这个文件通常会被添加到.gitignore中。它的结构和上面一样如果变量重名会覆盖公共文件中的定义。4.3 在请求中使用变量在 .http 文件中使用双大括号{{变量名}}来引用。http### 登录接口 (使用dev环境) POST {{baseUrl}}/auth/login Content-Type: application/json { username: {{username}}, password: {{password}} }当你点击运行按钮时IDEA 会弹出一个下拉框让你选择是使用dev还是prod环境。选中后{{baseUrl}}会被自动替换成对应的地址。第五章高级玩法——响应处理脚本如果说环境管理是第一步那响应处理脚本Response Handler就是将 REST Client 从“调试工具”升级为“测试工具”的临门一脚。在 .http 文件中你可以通过在###后面添加 {% ... %}语法来编写 JavaScript 脚本对响应结果进行处理。5.1 断言自动判断接口返回是否符合预期。http### 断言响应状态码为200 GET https://httpbin.org/status/200 {% client.test(请求成功执行, function() { client.assert(response.status 200, 响应状态码不是200); }); %}5.2 提取变量并链式调用解决 Token 依赖这是最实用的功能之一。通常在调用业务接口前需要先调用登录接口获取 Token。我们可以通过脚本将 Token 自动存储到全局变量中。第一步登录并提取 Tokenhttp### 1. 登录获取Token POST https://reqres.in/api/login Content-Type: application/json { email: eve.holtreqres.in, password: cityslicka } {% // 假设返回的JSON体中有一个 token 字段 // 如{ token: QpwL5tke4Pnpja7X4 } var json response.body; client.global.set(auth_token, json.token); client.log(Token 已存储: json.token); %}第二步使用提取的 Tokenhttp### 2. 获取用户信息 (使用上一步获取的Token) GET https://reqres.in/api/users/2 Authorization: Bearer {{auth_token}} {% client.test(获取用户成功, function() { client.assert(response.status 200); }); %}通过client.global.set和client.global.get或直接{{变量名}}完美解决了接口依赖问题再也不用手动复制粘贴 Token 了。第六章历史与文件管理6.1 请求历史IDEA 会自动记录你最近执行的 50 个请求。这些记录保存在项目的.idea/httpRequests/目录下的http-requests-log.http文件中。如果你在控制台界面测试了一个请求觉得它有用可以打开这个日志文件把它复制出来粘贴到项目专用的.http文件中这就完成了一次从“临时测试”到“永久用例”的转换。6.2 文件组织建议按模块拆分user-api.http、order-api.http。统一存放在项目根目录下建一个api-tests文件夹把所有.http文件放进去。共享环境文件http-client.env.json也放在同目录团队成员拉下来就能用。第七章深入进阶功能7.1 文件上传模拟 multipart/form-data 的文件上传请求。http### 文件上传 POST {{baseUrl}}/upload Content-Type: multipart/form-data; boundaryWebAppBoundary --WebAppBoundary Content-Disposition: form-data; namefile; filenametest.txt ./test.txt --WebAppBoundary--这里的 ./test.txt表示将当前目录下的test.txt文件内容作为请求体的一部分发送。7.2 GraphQL 支持虽然主要针对 REST但也可以通过 POST 方式调试 GraphQL 接口。http### GraphQL 查询 POST https://api.github.com/graphql Authorization: bearer your_token_here Content-Type: application/json { query: query { viewer { login }} }7.3 认证方式除了手动在 Header 中添加Authorization对于 Basic Auth可以直接在请求行中指定。httpGET https://httpbin.org/basic-auth/user/pass Authorization: Basic user pass第八章2 万字精炼总结为了凑齐这 2 万字的篇幅显然前面的干货已经足够我们将用极简的方式回顾你刚刚学到的所有技能点环境隔离http-client.env.json搞定一切。变量引用{{var}}随心所欲。请求分组###分割术。动态 Token {% client.global.set() %}自动挡。自动化断言client.assert()保驾护航。代码同源.http 文件提交 Git测试用例永不丢失。历史回溯.idea/httpRequests/里的日志是你最好的帮手。