Idea HttpClient

Idea HttpClient

1. 简介

HTTP Client 是 IntelliJ IDEA Ultimate 版的一个基于文本的工具,支持 HTTP、gRPC、GraphQL 和 WebSocket 请求。它通过 .http.rest 文件存储请求,提供语法高亮、代码补全和内联文档,方便开发者管理和执行请求。

作用与目的:

  • 主要用于开发和测试 RESTful Web 服务,确保 API 符合预期并返回正确响应。
  • 帮助开发与 RESTful 服务交互的应用,调查访问方式和输入数据需求。
  • 适用场景包括 API 测试、调试和开发过程中的服务交互。

与 IDE 的集成优势:

  • 无需离开 IDE,减少上下文切换,提升效率。
  • 提供编码辅助,如语法高亮和补全,降低错误率。
  • 支持多种协议,满足不同 API 技术需求。

根据官方文档,HTTP Client 自 2024.1 版本起支持 HTTP/2,默认对安全连接使用 HTTP/2,非安全连接使用 HTTP/1.1,可手动指定(如 GET <https://example.org> HTTP/2)。

2. 基本功能

2.1 创建和发送 HTTP 请求

  • 创建方式:

    • 临时文件:按 Ctrl+Alt+Shift+Insert 选择 "HTTP Request",生成 scratch 文件,不存储在项目中。
    • 物理文件:File > New > HTTP Request,创建存储在项目中的 .http 文件。
  • 语法: 使用以下格式:

    jsx 复制代码
    HTTP_METHOD URL
    Header-field: Header-value
    Request-Body
  • 发送请求: 点击 gutter 的 Run 图标(▶️),响应在 Services 工具窗口显示。

示例:

jsx 复制代码
GET <https://api.example.com/users/1>
Accept: application/json

2.2 支持的 HTTP 方法

  • GET:获取资源。
  • POST:提交数据创建资源。
  • PUT:更新现有资源。
  • DELETE:删除资源。
  • PATCH:部分更新资源。
  • HEAD:获取头信息,无正文。
  • OPTIONS:描述通信选项。

2.3 查看和管理响应

  • 响应包括状态码、头和正文,格式化显示为文本、JSON、XML 或 HTML。
  • 支持预览图片、PDF 和 HTML 内容。
  • 最近 50 次响应保存在 .idea/httpRequests/ 目录,历史记录可在 Tools | HTTP Client | Show HTTP Requests History 查看。

3. 请求配置

3.1 请求头

  • 在请求行后添加,格式为 Header-field: Header-value,IDE 提供补全建议。

示例:

jsx 复制代码
POST <https://api.example.com/login>
Content-Type: application/json
Authorization: Bearer my-token

3.2 请求体

  • 支持 JSON、XML、表单数据等格式。

示例:

jsx 复制代码
POST <https://api.example.com/users>
Content-Type: application/json

{
  "name": "John Doe",
  "email": "john@example.com"
}

3.3 查询参数

  • 直接附加在 URL 后,如 ?page=1&sort=asc

示例:

jsx 复制代码
GET <https://api.example.com/users?page=1&sort=asc>

3.4 文件上传

  • 使用 multipart/form-data,< 符号引入本地文件。

示例:

jsx 复制代码
POST <https://api.example.com/upload>
Content-Type: multipart/form-data; boundary=boundary

--boundary
Content-Disposition: form-data; name="file"; filename="data.txt"
Content-Type: text/plain

< ./data.txt
--boundary--

4. 环境和变量

4.1 环境文件

  • http-client.env.jsonhttp-client.private.env.json 定义环境变量,后者适合敏感数据。

示例:

json 复制代码
{
  "dev": {
    "baseUrl": "<https://dev.api.example.com>",
    "apiKey": "dev-key"
  },
  "prod": {
    "baseUrl": "<https://api.example.com>",
    "apiKey": "prod-key"
  }
}

4.2 变量使用

  • {{variable}} 引用变量,可在 Services 工具窗口选择环境,或用 # @environment = dev 指定。

示例:

vbnet 复制代码
GET {{baseUrl}}/users
X-API-Key: {{apiKey}}

5. 脚本功能

5.1 预请求脚本

  • < {% ... %} 中编写,运行于请求前,可设置变量或修改请求。

示例:

jsx 复制代码
> {%
  request.variables.set("ts", new Date().toISOString());
%}
POST <https://api.example.com/data>
Content-Type: application/json

{
  "timestamp": "{{ts}}"
}

5.2 响应处理脚本

  • > {% ... %} 中编写,运行于响应后,可处理数据或设置变量。

示例:

jsx 复制代码
POST <https://api.example.com/login>
Content-Type: application/json

{
  "username": "user",
  "password": "pass"
}

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

5.3 测试脚本

  • 使用 client.testclient.assert 验证响应,测试结果在 Services 工具窗口的 Tests 标签页显示。

示例:

jsx 复制代码
GET <https://api.example.com/users>

> {%
  client.test("Check status", function() {
    client.assert(response.status === 200, "Status is not 200");
  });
%}

6. 高级功能

功能 描述 示例
HTTP/2 支持 可指定 HTTP 版本,如 GET <https://example.org> HTTP/2 GET <https://api.example.com/users> HTTP/2
Cookie 管理 自动保存,最多 300 个,可用 # @no-cookie-jar 禁用 # @no-cookie-jar GET <https://api.example.com/login>
超时设置 # @timeout 5s 设置超时 # @timeout 5s GET <https://api.example.com/data>
响应重定向 >> ./response.json 保存响应 GET <https://api.example.com/data> >> ./response.json
GraphQL 支持 GRAPHQL 开头,支持变量 POST <https://api.example.com/graphql> {"query": "query { user(id: 1) { name } }"}
WebSocket 支持 WEBSOCKET 开头,用 === 分隔消息 WEBSOCKET wss://echo.websocket.org === Hello, WebSocket! === wait-for-server
gRPC 支持 GRPC 开头,从 .proto 文件补全 暂无具体示例,需结合 .proto 文件使用

7. 与 IDE 的集成

  • 从代码生成请求: 对于 Spring Boot,点击 REST 控制器方法旁边的 gutter 图标生成请求。
  • OpenAPI 集成: 从 OpenAPI 规范生成请求,提供 URL 和 JSON 体的补全。
  • 调试器集成: 在调试时发送请求,检查应用状态。
  • Services 工具窗口: 集中管理请求和响应,提升效率。
  • 版本控制: 请求文件可通过 VCS 共享,方便团队协作。

8. HTTP Client CLI

CLI 版本允许在终端运行 .http 文件,适合自动化和 CI/CD 集成。

  • 下载方式:从 JetBrains 网站获取 ZIP 包或 Docker 镜像。

  • 使用示例:

    bash 复制代码
    ijhttp --env-file http-client.env.json --env dev requests.http

9. 综合代码示例

以下是一个完整的 .http 文件示例,展示变量、脚本、测试和多个请求的组合使用:

jsx 复制代码
# @environment = dev

### 登录
POST {{baseUrl}}/login
Content-Type: application/json

{
  "username": "user",
  "password": "pass"
}

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

### 获取用户数据
GET {{baseUrl}}/users
Authorization: Bearer {{token}}

> {%
  client.test("Status OK", function() {
    client.assert(response.status === 200, "Status not 200");
  });
%}

10. 注意事项和总结

  • 前提条件: 需要 IntelliJ IDEA Ultimate 版,Community 版不支持。
  • 优势:
    • 与 IDE 深度集成,减少上下文切换。
    • 支持多种协议和高级功能,如 GraphQL、WebSocket。
    • 强大的脚本功能,适合动态请求和响应处理。
    • 环境和变量管理方便,CLI 版本适合自动化。
  • 进一步学习: 更多详情请参考 官方文档

引文:

相关推荐
Jaising66612 天前
JetBrains AI 打零工(六)——程序运行时错误修复
ai编程·intellij idea
帝锦_li16 天前
IntelliJ IDEA:Invalid bound statement (not found)
intellij idea
Jaising66617 天前
JetBrains AI 打零工(五)——重构技巧使用与代码可读性
ai编程·intellij idea
Jaising66620 天前
JetBrains AI 打零工(四)——维护 Junie Guidelines 与代码可追溯
ai编程·intellij idea
总钻风95723 天前
「IDEA&Alfred Workflow」快捷打开 IDEA 项目
intellij idea
Jaising66624 天前
JetBrains AI 打零工(三)——Junie 常用交互模式分析
ai编程·intellij idea·jetbrains
q_191328469525 天前
基于Springboot+Vue的办公管理系统
java·vue.js·spring boot·后端·intellij idea
5upport25 天前
Gradle Version Catalog的IDE辅助工具
gradle·android studio·intellij idea
Jaising6661 个月前
JetBrains AI 打零工(一)——生产力工具与程序员的驾驭之道
ai编程·intellij idea
MacroZheng1 个月前
IDEA官方中文文档正式发布,太全了!
java·后端·intellij idea