IntelliJ IDEA 自带的 HTTP Client接口调用插件,替代 Postman

文章目录

    • 引言
    • 建议目录结构
    • 新建请求
    • 不同环境的变量配置
      • 添加环境
      • http-client.env.json
      • http-client.private.env.json
      • 引用变量
    • 请求示例
      • Get请求示例
      • Post请求示例
      • 鉴权示例
      • 断言示例
      • Websocket请求示例
    • 内置对象和动态变量
      • 内置对象:
      • 内置变量:

引言

在日常的 Web 服务开发和调试中,我们经常需要对接口进行调用和测试。无论是在与团队内部协作开发时,还是在与第三方系统进行接口联调时,接口调用是不可或缺的一环。而在这个过程中,许多开发者会首选一款功能强大且易用的工具,其中最常见的就是 Postman —— 这是一款备受欢迎的接口调试工具,拥有丰富的功能和用户友好的界面。

然而,随着开发工具的不断演进,一些集成开发环境(IDE)也提供了强大的工具来简化和优化接口调用的过程。其中,IntelliJ IDEA 作为一款广泛使用的 Java 开发工具,自带了一个强大的 HTTP Client 接口调用插件,为开发者提供了一种替代 Postman 的选择。

建议目录结构

src
	main
    test    
    	http
            ├── AXXX.http                     # 调用A接口的文件
            ├── BXXX.http                     # 调用B接口的文件
            ├── http-client.env.json          # 通用配置(接口地址等)
            ├── http-client.private.env.json  # 私有配置(密码、Token等)

新建请求

  • 入口一:工具栏(idea顶上的一行工具里面)->Tools->HTTP Client。创建的是临时文件,不跟项目关联。

在这里插入图片描述

  • 入口二:点击接口旁边的这个图标,可以自动生成接口的url请求。创建的是临时文件,不跟项目关联。

  • 入口三:通过 cURL 创建请求,在xxx.http文件上,点击右上角的 Convert form cURL 按钮,然后输入 cURL 地址即可自动转换。

  • 入口四:可以在项目中测试目录(或者其他目录)下建一个http目录,右击New->HTTP Request,输入文件名称(.http结尾)即可创建。建议用这个,跟项目关联

从http请求跳转到接口层的代码

光标放在url上面,然后 Ctrl + 鼠标左键可以打开,可以从http请求跳转到接口层的代码。

请求结果

所有的请求结果,请求历史记录,cookies等信息会存放在 .idea 文件夹下,如下:

不同环境的变量配置

在 Spring Boot 项目中,我们通常使用 Profile 机制来实现在不同环境中应用不同的配置文件。类似地,在 IntelliJ IDEA 中使用 HTTP Client 插件时,我们也可以借助类似的机制,以便在不同环境下轻松管理和切换配置。

首先,我们可以创建一个名为 http-client.env.json 的配置文件,用于定义通用变量,例如 URL 地址、端口号等。这样一来,我们可以通过在不同环境中使用不同的配置文件,轻松地适应不同的场景需求。

// http-client.env.json
{
  "url": "https://api.example.com",
  "port": 8080,
  "commonHeader": "application/json"
}

其次,为了安全起见,我们还可以创建一个名为 http-client.private.env.json 的配置文件,专门用于存储敏感变量,例如用户名/密码、访问令牌等。请注意,由于这些信息属于敏感数据,我们强烈建议不要将 http-client.private.env.json 提交到 Git 仓库中,以免泄露敏感信息。

// http-client.private.env.json
{
  "username": "your_username",
  "password": "your_password",
  "token": "your_access_token"
}

最后,需要强调的是,确保将 http-client.private.env.json 添加到项目的 .gitignore 文件中,以防止不小心将敏感信息提交到版本控制系统中。

添加环境

可以设置不同环境的变量,比如dev、test、prod等。

在这里插入图片描述

http-client.env.json

{
  "dev": {
    "host": "localhost",
    "port": 8080,
    "domain": "localhost:8080",
    "cookie" : "cookieDev"
  },
  "test": {
    "host": "baidu.test.com",
    "port": 8080,
    "domain": "baidu.test.com",
    "cookie" : "cookieSit"
  },
  "prod": {
    "host": "baidu.com",
    "port": 8080,
    "domain": "baidu.com",
    "cookie" : "cookieDevProd"
  }
}

http-client.private.env.json

{
  "dev": {
    "username": "",
    "password": ""
  },
  "test": {
    "username": "",
    "password": ""
  },
  "prod": {
    "username": "",
    "password": ""
  }  
}

引用变量

要引用这些定义变量,只需要使用{{}} 这个符号即可。比如引用domain ,可以用 {{domain}}。

引用的环境变量如下:

POST http://{{domain}}/dangerWork/query
Content-Type: application/json
Cookie:{{cookie}}

{
  "xxx": "xxx"
}

运行时,自行选择运行环境。

请求示例

Get请求示例

### 带有头部的 GET 请求
GET https://httpbin.org/ip
Accept: application/json

### 带有参数的 GET 请求
GET https://httpbin.org/get?show_env=1
Accept: application/json

### 使用环境变量的 GET 请求
GET {{host}}/get?show_env={{show_env}}
Accept: application/json

### 禁用重定向的 GET 请求
# @no-redirect
GET http://httpbin.org/status/301

### 带有动态变量的 GET 请求
GET http://httpbin.org/anything?id={{$uuid}}&ts={{$timestamp}}

### 禁止将请求保存到请求历史记录
// @no-log
GET example.com/api

### 禁止将收到的 cookie 保存到 cookie jar
// @no-cookie-jar
GET example.com/api

### 

Post请求示例

### 第一行:POST请求,请求地址
### 第二 三行:请求头信息,多个请求头信息依次写下去(第三行、第四行……)
### 第N行:写具体的请求体,这里是JSON串,请求头和请求体之间要空出一行
### 多个请求间用 ### 分割
### 可以用 ptr 快捷提示 form表单是 ptrp

### 发送带有 JSON 主体的 POST 请求
POST https://httpbin.org/post
Content-Type: application/json

{
  "id": 999,
  "value": "content"
}

### 发送将主体作为参数的 POST 请求
POST https://httpbin.org/post
Content-Type: application/x-www-form-urlencoded

id=999&value=content

### 发送包含文本和文件字段的表单
POST https://httpbin.org/post
Content-Type: multipart/form-data; boundary=WebAppBoundary

--WebAppBoundary
Content-Disposition: form-data; name="element-name"
Content-Type: text/plain

Name
--WebAppBoundary
Content-Disposition: form-data; name="data"; filename="data.json"
Content-Type: application/json

< ./request-form-data.json
--WebAppBoundary--

### 发送带有请求主体中动态变量的请求
POST https://httpbin.org/post
Content-Type: application/json

{
  "id": {{$uuid}},
  "price": {{$randomInt}},
  "ts": {{$timestamp}},
  "value": "content"
}

###

鉴权示例

### 基本授权。
GET https://httpbin.org/basic-auth/user/passwd
Authorization: Basic user passwd

### 带有变量的基本授权。
GET https://httpbin.org/basic-auth/user/passwd
Authorization: Basic {{username}} {{password}}

### 摘要授权。
GET https://httpbin.org/digest-auth/realm/user/passwd
Authorization: Digest user passwd

### 带有变量的摘要授权。
GET https://httpbin.org/digest-auth/realm/user/passwd
Authorization: Digest {{username}} {{password}}

### 令牌授权,第 1 部分。检索并保存令牌。
POST https://httpbin.org/post
Content-Type: application/json

{
  "token": "my-secret-token"
}

> {% client.global.set("auth_token", response.body.json.token); %}

### 令牌授权,第 2 部分。使用令牌进行授权。
GET https://httpbin.org/headers
Authorization: Bearer {{auth_token}}

###

断言示例

### 成功的测试:检查响应状态是否为 200
GET https://httpbin.org/status/200

> {%
client.test("请求成功执行", function() {
  client.assert(response.status === 200, "响应状态不是 200");
});
%}

### 失败的测试:检查响应状态是否为 200
GET https://httpbin.org/status/404

> {%
client.test("请求成功执行", function() {
  client.assert(response.status === 200, "响应状态不是 200");
});
%}

### 检查响应状态和内容类型
GET https://httpbin.org/get

> {%
client.test("请求成功执行", function() {
  client.assert(response.status === 200, "响应状态不是 200");
});

client.test("响应内容类型为 JSON", function() {
  var type = response.contentType.mimeType;
  client.assert(type === "application/json", "期望 'application/json',但收到 '" + type + "'");
});
%}

### 检查响应主体
GET https://httpbin.org/get

> {%
client.test("存在 Headers 选项", function() {
  client.assert(response.body.hasOwnProperty("headers"), "在响应中找不到 'headers' 选项");
});
%}

###

Websocket请求示例

### 简单的 WebSocket 请求
// 可以直接从 Services 工具窗口向服务器发送消息
WEBSOCKET ws://{{$exampleServer}}/ws

### 带有客户端消息的请求
// 可以在请求体中指定客户端消息。使用 '===' 来分隔消息。
// 在消息上方添加 '=== wait-for-server',以在收到服务器响应后发送消息。
// 要等待 N 个响应,请添加 '=== wait-for-server' N 次。
WEBSOCKET ws://{{$exampleServer}}/ws
Content-Type: application/json // 我们使用它进行突出显示

===
{
  "message": "你好,服务器!",
  "repeat": 3
}
=== wait-for-server
=== wait-for-server
{
  "message": "我们发送这条消息...",
  "repeat": 0
}
===
{
  "message": "和这条消息一起",
  "repeat": 1
}

### 带有脚本的请求
// 此外,我们还可以使用脚本向服务器发送消息并验证服务器的消息。
WEBSOCKET ws://{{$exampleServer}}/ws
Content-Type: application/json

{
  "message": "开始的消息"
}

> {%
  var i = 0
  response.body.onEachMessage((message, unsubscribe, output) => {
    i++
    const jsonMessage = JSON.parse(message); // 我们知道我们的示例服务器返回 JSON
    client.test("服务器发送了一个带有 'message' 属性的 JSON:" + i , () => {
      client.assert(jsonMessage.message !== undefined)
    });
    if (jsonMessage.message.includes("finish")) {
      unsubscribe() // 移除当前的监听器
      return
    }

    if (i === 5) {
      output(JSON.stringify({
        message: "finish"
      }));
    } else {
      output(JSON.stringify({
        message: "脚本发送的消息:" + i
      }));
    }
  }, () => {
    client.log("我们停止了从当前 'onEachMessage' 调用中的 WebSocket 监听!")
  });
 %}

内置对象和动态变量

IntelliJ IDEA 的 HTTP Client 插件内置了一些对象和变量,以便在请求和脚本中执行动态操作。以下是一些常见的内置对象和变量:

内置对象:

每个请求变量

< {%
    request.variables.set("firstname", "John")
%}
GET http://example.org/{{firstname}}

全局请求变量

GET https://httpbin.org/get

> {%
    client.global.set("my_cookie", response.headers.valuesOf("Set-Cookie")[0]);
%}
  • request 对象
  • client 对象
  • crypto 对象

内置变量:

动态变量在每次运行请求时生成一个值。它们的名称以 $ 开头:

  • $uuid$random.uuid:生成一个通用唯一标识符(UUID-v4)。
  • $timestamp:生成当前的UNIX时间戳。
  • $isoTimestamp:生成UTC时区的当前时间戳,以ISO-8601格式表示。
  • $randomInt:生成介于0和1000之间的随机整数。
  • $random.integer(from, to):生成介于from(包括)和to(不包括)之间的随机整数,例如 random.integer(100, 500)。如果不提供参数,它将生成介于0和1000之间的随机整数。
  • $random.float(from, to):生成介于from(包括)和to(不包括)之间的随机浮点数,例如 random.float(10.5, 20.3)。如果不提供参数,它将生成介于0和1000之间的随机浮点数。
  • $random.alphabetic(length):生成长度为 length(必须大于0)的大写和小写字母序列。
  • $random.alphanumeric(length):生成长度为 length(必须大于0)的大写和小写字母、数字和下划线序列。
  • $random.hexadecimal(length):生成长度为 length(必须大于0)的随机十六进制字符串。
  • $random.email:生成一个随机电子邮件地址。
  • $exampleServer:被替换为IntelliJ IDEA内置的Web服务器,仅可通过HTTP Client访问。此变量用于GraphQL和WebSocket示例中。

例如:

GET http://localhost/api/get?id={{$uuid}}

这些变量和对象允许你在请求执行期间执行条件检查、日志记录和动态操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/249233.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Eslint 要被 Oxlint替换了吗

什么是 Oxlint 由于最近的rust在前端领域的崛起,基于rust的前端生态链遭到rust底层重构,最近又爆出OxLint,是一款基于Rust的linter工具。Oxlint在国外前端圈引起热烈讨论,很多大佬给出了高度评价。 事实上,Oxlint 是 Oxc 项目旗下的一款产品,专为 JavaScript 和 TypeSc…

Python轴承故障诊断 (七)基于EMD-CNN-LSTM的故障分类

目录 前言 1 经验模态分解EMD的Python示例 2 轴承故障数据的预处理 2.1 导入数据 2.2 制作数据集和对应标签 2.3 故障数据的EMD分解可视化 2.4 故障数据的EMD分解预处理 3 基于EMD-CNN-LSTM的轴承故障诊断分类 3.1 训练数据、测试数据分组&#xff0c;数据分batch 3.…

TG-5510cb: txo高稳定性+105℃高温

TG-5510CB是一款高稳定性TCXO&#xff0c;可提供CMOS或限幅正弦输出&#xff0c;5G基站和边缘计算的额定温度为85C&#xff0c;需要室外安装、小型化和无风扇运行。与其他TCXO相比&#xff0c;实验室提供了许多改进&#xff0c;如低温度斜率和相位噪声。符合GR-1244-CORE地层3和…

ssm+vue的高校智能培训管理系统分析与设计(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的高校智能培训管理系统分析与设计&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09…

git 常见错误总结(会不断更新中。。)

常见错误 1. 配置部署key后git clone还是拉不下代码 执行以下命令 先添加 SSH 密钥到 SSH 代理&#xff1a; 如果你使用 SSH 代理&#xff08;例如 ssh-agent&#xff09;&#xff0c;将生成的私钥添加到代理中。 ssh-add ~/.ssh/gstplatrontend/id_rsa如果报错以下错误信息…

centos7下用yum安装包出现问题

原因&#xff1a; 这是因为yum采用Python作为命令解释器&#xff0c;这可以从/usr/bin/yum文件中第一行#!/usr/bin/python发现。而python版本之间兼容性不太好&#xff0c;使得2.X版本与3.0版本之间存在语法不一致问题。而CentOS 7自带的yum采用的是python2.7&#xff0c;当系…

3. cgal 示例 GIS (Geographic Information System)

GIS (Geographic Information System) 地理信息系统 原文地址: https://doc.cgal.org/latest/Manual/tuto_gis.html GIS 应用中使用的许多传感器&#xff08;例如激光雷达&#xff09;都会生成密集的点云。此类应用程序通常利用更先进的数据结构&#xff1a;例如&#xff0c;不…

车载以太网笔记

文章目录 以太网协议分层协议中间设备子网掩码物理层测试内容比较杂,后续会整理。 以太网协议分层 协议 中间设备

Github 2023-12-16开源项目日报Top10

根据Github Trendings的统计&#xff0c;今日(2023-12-16统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目2非开发语言项目2TypeScript项目1Jupyter Notebook项目1Go项目1PHP项目1JavaScript项目1C#项目1 精…

初识Dubbo学习,一文掌握Dubbo基础知识文集(1)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

verilog进阶语法-触发器原语

概述: xilinx设计的触发器提供了多种配置方式&#xff0c;方便设计最简触发器&#xff0c;同步复位触发器&#xff0c;异步复位触发器&#xff0c;同步时钟使能触发器&#xff0c;异步时钟使能触发器。输出又分为同步复位和置位&#xff0c;异步清零和预置位。 官方提供的原语…

抖音视频解析,无水印解析下载抖音视频

抖音视频解析&#xff0c;你是否经常遇到这样的情况&#xff0c;看到一些非常精彩的抖音视频&#xff0c;想要保存下来&#xff0c;但因为下载速度慢或者视频带有水印而感到困扰&#xff1f;那么&#xff0c;这款&#xff08;抖音无水印解析工具&#xff09;将是你的得力助手&a…

离散域下内置式永磁同步电机复矢量电流调节器设计

导读:本期文章主要介绍离散域下内置式永磁同步电机复矢量电流调节器的设计。通过与传统的线性PI调节器仿真验证分析,离散域下设计的电流调节器削弱了d、q之间耦合的影响,大大提高了系统的控制性能。 如需要文中的仿真模型,关注微信公众号:浅谈电机控制,留言获取。 一、…

股票交易信息实时大屏(Kafka+storm+Redis+DataV)

目录 引言 需求分析&#xff1a; 思路 数据源&#xff1a; 数据传输&#xff1a; 数据处理&#xff1a; 数据统计&#xff1a; 数据可视化&#xff1a; 数据提取&#xff1a; 技术栈 技术实现 前端界面搭建 布局: ​ 组件&#xff1a; 通信&#x…

免费下载6G全国90米高程DEM

这里为大家分享全国90米高程原始数据。 全国90米高程DEM 90米高程数据的经纬度跨度有按30度进行分块和按5度进行分块两种&#xff0c;下载完成后的文件如下图所示。 30度分块与5度分块 当经纬度跨度按30度进行分块时&#xff0c;全国范围共分成6块&#xff0c;由于分块的跨度…

【网络安全】网络防护之旅 - 非对称密钥体制的解密挑战

&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《网络安全之道 | 数字征程》⏰墨香寄清辞&#xff1a;千里传信如电光&#xff0c;密码奥妙似仙方。 挑战黑暗剑拔弩张&#xff0c;网络战场誓守长。 目录 &#x1f608;1. 初识网络安…

KMP算法, 什么是KMP算法 ,暴力匹配 ,KMP算法实现

文章目录 KMP算法什么是KMP算法暴力匹配KMP算法实现 KMP算法 什么是KMP算法 KMP是Knuth、Morris和Pratt首字母的缩写&#xff0c;KMP也是由这三位学者发明&#xff08;1977年联合发表论文&#xff09;。 KMP主要应用在字符串的匹配&#xff0c;是一个解决模式串在文本串是否…

基于单片机的太阳能数据采集系统(论文+源码)

1. 系统设计 在本次太阳能数据采集系统的设计中&#xff0c;以AT89C52单片机为主要核心&#xff0c;主要是由LCD液晶显示模块、存储模块、温度检测模块、串口通信模块&#xff0c;光照检测模块等组成&#xff0c;其实现了对太阳能板的温度&#xff0c;光照强度的检测和记录&…

在 App 设计工具的设计视图中布局 App

目录 自定义组件 对齐和间隔组件 组件分组 对组件重新排序 修改组件的 Tab 键焦点切换顺序 在容器中排列组件 在 App 设计工具中创建和编辑上下文菜单 创建上下文菜单 编辑上下文菜单 更改上下文菜单分配 App 设计工具中的设计视图提供了丰富的布局工具&#xff0c;用…

MySQL数据库 DDL

目录 一、DDL 二、操作数据库 三、操作表 四、数据类型 五、表操作案例 六、修改表 七、删除表 一、DDL Data Definition Language&#xff0c;数据定义语言&#xff0c;用来定义数据库对象(数据库&#xff0c;表&#xff0c;字段) 。 二、操作数据库 &#xff08;1&am…