《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/IDEA-HTTP-Client/ 「芋道源码」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

1. 概述

在日常开发中,在我们编写 HTTP API 后,可以采用 Postman 模拟调用测试,非常方便。如下图所示:

Postman 接口测试

但是,开发是团队协作的,而 Postman 无法便利的团队共享。这就导致,在修改到其他成员开发的 API 时,我们不得不自己在重新创建 Postman 调用,非常麻烦。并且,如果是一个复杂的 API 时,例如说用户提交订单,需要构建的请求参数是比较多的。

友情提示:Postman 支持团队协作,免费版有次数限制。

基于这个痛点,艿艿推荐采用 IDEA HTTP Client 工具,取代 Postman 的使用。下面,我们来一起偷偷的学习下,不要告诉 🐶 芳。

我要学习!

2. IDEA HTTP Client

IDEA HTTP Client 是 IDEA 提供的 HTTP API 测试插件,默认内置,直接开启即可使用。

IDEA HTTP Client 插件

一个简单的使用示例,如下图所示:

IDEA HTTP Client 示例

因为 IDEA HTTP Client 采用后缀为 .http文本文件,所以可以和 Java 代码一起,使用 Git 进行版本管理,从而实现团队协作的共享

3. 快速入门

本小节,我们来快速入门下 IDEA HTTP Client 的使用,涉及到 3 种常见 HTTP API 的示例:

  • GET 请求
  • POST 请求 + Form
  • POST 请求 + JSON

在任一目录下,右键选择「HTTP Request」菜单,创建一个 .http 文件。如下图所示:

创建 HTTP Request

良心艿:艿艿的个人习惯,在 Controller 所在的包下,直接创建一个同名的 .http 文件,查找便利。

.http 文件的右上角,提供了五个菜单功能,比较简单,艿艿就不啰嗦结束了。胖友可以自己试着点一点,如下图所示:

HTTP Request 菜单

3.1 使用示例

下面,我们在刚创建的 .http 文件中,编写三种常见 HTTP API 的使用示例。

良心艿:示例项目,对应 Github 仓库为 https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-71-http-debug/lab-71-idea-http-client 地址。

3.1.1 POST 请求 + Form 的示例

对应 Controller 的代码如下:

@PostMapping("/user/login")
public Map<String, Object> login(@RequestParam("username") String username,
@RequestParam("password") String password) {
if ("yudaoyuanma".equals(username) && "123456".equals(password)) {
Map<String, Object> tokenMap = new HashMap<>();
tokenMap.put("userId", 1);
tokenMap.put("token", "token001");
return tokenMap;
}
throw new RuntimeException("小朋友,你的账号密码不正确哟!");
}

对应的 IDEA HTTP Client 的代码如下:

### 测试 /user/login:登陆成功
POST http://127.0.0.1:8080/user/login
Content-Type: application/x-www-form-urlencoded

username=yudaoyuanma&password=123456

讲解示例

然后,点击绿色小箭头,即可发起请求。

3.1.2 POST 请求 + JSON 的示例

对应 Controller 的代码如下:

@PostMapping("/user/update")
public Boolean update(@RequestBody UserUpdateVO updateVO) {
logger.info("[update][收到更新请求:{}]", updateVO.toString());
return true;
}

对应的 IDEA HTTP Client 的代码如下:

### 测试 /user/update:更新成功
POST http://127.0.0.1:8080/user/update
Content-Type: application/json

{
"nickname": "我是昵称",
"gender": 1
}

讲解示例

3.1.3 GET 请求的示例

对应 Controller 的代码如下:

@GetMapping("/user/get-current")
public Map<String, Object> getCurrentUser(@RequestHeader("Authorization") String authorization,
@RequestParam("full") boolean full) {
if ("token001".equals(authorization)) {
Map<String, Object> userInfo = new HashMap<>();
userInfo.put("id", 1);
// full 为 true 时,获得完整信息
if (full) {
userInfo.put("nickname", "芋道源码");
userInfo.put("gender", 1);
}
return userInfo;
}
throw new RuntimeException("小朋友,你没有登录哟!");
}

对应的 IDEA HTTP Client 的代码如下:

### 测试 /user/get-current:获取成功
GET http://127.0.0.1:8080/user/get-current?full=true
Authorization: token001

讲解示例

3.2 Live Template 的支持

友情提示:对 Live Template 不了解的胖友,可以阅读《代码生成利器:IDEA 强大的 Live Templates》文章。

IDEA HTTP Client 内置了 6 个 Live Template 模板,方便我们快速创建 HTTP Request。如下图所示:

内置 Live Template 模板

使用示例,如下图所示:

Live Template 示例

如果内置的 Live Template 无法满足胖友的诉求,可以进行自定义。

4. 进阶使用

本小节,我们来学习下 IDEA HTTP Client 的进阶使用,特别是环境变量。

进阶使用

4.1 环境变量

在 Spring Boot 项目中,我们通过 Profile 机制,实现不同环境,不同配置文件。在 IDEA HTTP Client 插件中,提供类似的机制,可以定义配置文件,抽取出不同环境的变量

  • 通过创建 http-client.env.json 配置文件,定义通用变量。例如说,url 地址、port 端口等等。
  • 通过创建 http-client.private.env.json 配置文件,定义敏感变量。例如说,username/password 账号密码、token 访问令牌等等。

🔥 注意再注意http-client.private.env.json 是定义定义敏感变量的配置文件,所以不要提交到 Git 仓库中!!!

4.1.1 使用示例

下面,我们来简单使用下。创建配置文件,如下图所示:

环境变量的示例

  • http-client.env.json 配置文件的内容如下:

    {
    "local": {
    "baseUrl": "http://127.0.0.1:8080"
    },
    "dev": {
    "baseUrl": "http://192.168.100.200:8080"
    }
    }
  • http-client.private.env.json 配置文件的内容如下:

    {
    "local": {
    "username": "yudaoyuanma",
    "password": "123456",
    "token": "token001"
    },
    "dev": {
    "username": "yutou",
    "password": "buzhidao",
    "token": "aoteman"
    }
    }

4.1.2 简单测试

下面,我们来简单测试下。如下图所示:

环境变量的测试

环境变量的测试

4.2 结果断言

IDEA HTTP Client 提供 Response Handler Script 机制,允许我们通过编写 JavaScript 脚本,进行响应结果的处理。

同时,它又提供了断言函数,这样它不仅仅能够作为一个 HTTP API 的调用工具,还能作为自动化测试工具。

断言函数

4.2.1 使用示例

下面,我们来简单使用下。创建一个新的 .http 文件,如下图所示:

环境变量的测试

### 001 测试 /user/login:登陆成功
POST http://127.0.0.1:8080/user/login
Content-Type: application/x-www-form-urlencoded

username=yudaoyuanma&password=123456

> {%
client.test("验证登陆成功", function (){
client.assert(response.status === 200, "响应状态应该是 200,结果是 " + response.status)
client.assert(response.body.userId === 1, "响应的 userId 应该是 1,结果是 " + response.body.userId)
client.assert(response.body.token === "token001", "响应的 token 应该是 token001,记过是 " + response.body.token)
});
%}

### 002 测试 /user/login:登陆失败,密码不正确
POST http://127.0.0.1:8080/user/login
Content-Type: application/x-www-form-urlencoded

username=yudaoyuanma&password=buzhidao

> {%
client.test("验证登陆失败", function (){
client.assert(response.status === 200, "响应状态应该是 200,结果是 " + response.status)
});
%}

4.2.2 简单测试

下面,我们来简单测试下。

① 执行 001 测试,通过。如下图所示:

001 测试:通过

② 执行 002 测试,不通过。如下图所示:

002 测试:不通过

4.3 结果暂存与使用

IDEA HTTP Client 提供了环境变量设置函数,这样配合 Response Handler Script 机制,可以实现响应结果的暂存与使用的功能。

例如说,我们可以先调用登陆接口,接响应结果中的 token 暂存到环境变量中。然后,在调用其它接口时,就可以带上暂存到环境变量中的 token 啦。

4.3.1 使用示例

下面,我们来简单使用下。创建一个新的 .http 文件,如下图所示:

结果暂存与使用

4.3.2 简单测试

下面,我们来简单测试下。

① 首先,调用 /user/get-current 接口,返回结果如下:

{
"timestamp": "2020-12-19T17:35:58.033+0000",
"status": 500,
"error": "Internal Server Error",
"message": "小朋友,你没有登录哟!",
"path": "/user/get-current"
}

报错,因为在环境变量token_from_server 不存在,获取不到用户信息。

② 然后,调用 /user/login 接口,进行登陆,返回结果如下:

{
"userId": 1,
"token": "token001"
}

将响应结果的 token 设置到环境变量token_from_server 中。

③ 最后,调用 /user/get-current 接口,返回结果如下:

{
"gender": 1,
"nickname": "芋道源码",
"id": 1
}

成功,说明此时环境变量token_from_server 存在。


可能胖友会好奇,我们暂存到环境变量有效期有多久?答案是,存储在内存中,直到重启 IDEA 后失效。

666. 彩蛋

至此,我们已经完成 IDEA HTTP Client 的学习,一起来简单总结下:

  • 通过创建 .http 文件,并创建接口对应的 Request 进行测试
    • 通过将 .http 文件提供到 Git 仓库中,实现团队共享
    • 结合 IDEA 的 Live Template 功能,可以实现 Request 的快速创建
  • http-client.env.jsonhttp-client.private.env.json 配置文件定义变量,实现不同环境不同配置
  • 使用 Response Handler Script 机制,可以进行响应结果的处理。
    • 搭配断言函数,可以将 IDEA HTTP Client 作为自动化测试工具。
    • 搭配设置函数,实现结果的暂存与使用。

在额外补充一点,如果一个 HTTP 接口有多种情况的测试,最好创建多个 Request 噢,方便后续回归测试。如下图所示:

一个接口,多个故事

每个人喜欢的 HTTP 测试工具不同,欢迎胖友留言,进行讨论。


End~继续抠脚。

我是艿艿,一个每天徘徊在煞笔牛啤的死胖子。

我

文章目录
  1. 1. 1. 概述
  2. 2. 2. IDEA HTTP Client
  3. 3. 3. 快速入门
    1. 3.1. 3.1 使用示例
      1. 3.1.1. 3.1.1 POST 请求 + Form 的示例
      2. 3.1.2. 3.1.2 POST 请求 + JSON 的示例
      3. 3.1.3. 3.1.3 GET 请求的示例
    2. 3.2. 3.2 Live Template 的支持
  4. 4. 4. 进阶使用
    1. 4.1. 4.1 环境变量
      1. 4.1.1. 4.1.1 使用示例
      2. 4.1.2. 4.1.2 简单测试
    2. 4.2. 4.2 结果断言
      1. 4.2.1. 4.2.1 使用示例
      2. 4.2.2. 4.2.2 简单测试
    3. 4.3. 4.3 结果暂存与使用
      1. 4.3.1. 4.3.1 使用示例
      2. 4.3.2. 4.3.2 简单测试
  5. 5. 666. 彩蛋