如何不用第三方工具,在PhpStorm中用REST Client测试API接口调试?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1068个文字,预计阅读时间需要5分钟。
PHPStorm 内置的 HTTP Client 可以直接发起请求、携带变量、断言、连接 Xdebug,无需安装 Postman 或插件。但前提是已经配置好 .http 文件,包括格式、变量路径、放置位置、中文和 token。
怎么写一个能运行的最简 .http 文件
文件必须是 .http 或 .rest 后缀,放在项目内(不能放桌面或系统临时目录),首行必须是大写方法 + 空格 + 完整 URL:
-
GET https://httpbin.org/get✅ 可运行 -
get https://httpbin.org/get❌ 方法小写,不识别 -
GET https://httpbin.org/get # 注释❌ URL 后不能跟任何字符,包括空格和注释 -
GET https://httpbin.org/get?name=张三❌ 中文没编码,服务端大概率 400 或收不到
光标停在这一行,按 Ctrl+Enter(macOS 是 Cmd+Enter)即可发送。响应出现在下方 Services 工具窗口的 HTTP Client 标签页里。
变量怎么定义才不报 Cannot resolve variable
变量名不能含点号 .、短横线 - 或空格,比如 api.base_url 或 auth-token 都会失败。只接受字母、数字、下划线,且必须先定义再引用。
两种定义方式都有效,但位置很关键:
- 顶部全局定义(推荐):
@host = http://localhost:8000<br>@token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9<br><br>GET {{host}}/api/users/1<br>Authorization: Bearer {{token}}
- 独立
###块定义:### @env dev<br>@host = https://api.example.com<br><br>GET {{host}}/status
常见错误:
- 把
@host = ...写在GET请求块下面 → 只在当前块生效,上面的请求用不了 -
http-client.env.json放错路径(必须在项目根目录,或手动在Settings → Tools → HTTP Client → Environment files指定) - JSON 文件里字段名和
{{xxx}}不一致,比如 JSON 是"base_url": "...",却写成{{baseUrl}}
POST JSON 请求总返回 400?检查这三点
POST 的 body 和 header 必须严格分层,空行不能少,缩进不能有,JSON 不能非法:
- 请求行后必须紧接一个空行
- Header 行必须顶格,
Content-Type: application/json不能有前导空格 - Body 必须顶格写,不能缩进,字段名和字符串值都要双引号:
POST {{host}}/api/posts<br>Content-Type: application/json<br><br>{ "title": "Hello", "body": "World" }
容易踩的坑:
- 复制 JSON 时带了全角引号或中文逗号 → 直接 400
- Body 前多了一个空行 → PhpStorm 当作两个请求解析,第二段没方法名就报错
-
Content-Type漏写或写成content-type(大小写敏感)→ 后端可能当 text/plain 解析
调试 PHP 接口时断点不命中?Xdebug 头漏了
用 HTTP Client 调试 PHP 接口,不是光写个 GET 就行——必须显式带上 Xdebug 触发头,否则断点永远不响:
- 加
XDEBUG_SESSION_START: PHPSTORM这个 header(值要和 PhpStorm 设置里的 Debug session ID 一致,默认就是PHPSTORM) - URL 必须能被本地 Web 服务解析,建议用
php -S localhost:8000 router.php启简易服务,避开 Nginx/Apache 配置干扰 - 确保 PHP CLI 和 Web SAPI 都加载了 Xdebug,且
xdebug.client_host指向宿主机 IP(Docker 里别写localhost)
如果接口走路由框架(Laravel、Slim),断点打在控制器里却不触发,大概率是因为实际执行的是 index.php 入口文件——先在入口第一行打个断点,确认通道通了再说。文件路径含中文或空格也会让 Xdebug 3.2+ 解析失败,这点很容易被忽略。
本文共计1068个文字,预计阅读时间需要5分钟。
PHPStorm 内置的 HTTP Client 可以直接发起请求、携带变量、断言、连接 Xdebug,无需安装 Postman 或插件。但前提是已经配置好 .http 文件,包括格式、变量路径、放置位置、中文和 token。
怎么写一个能运行的最简 .http 文件
文件必须是 .http 或 .rest 后缀,放在项目内(不能放桌面或系统临时目录),首行必须是大写方法 + 空格 + 完整 URL:
-
GET https://httpbin.org/get✅ 可运行 -
get https://httpbin.org/get❌ 方法小写,不识别 -
GET https://httpbin.org/get # 注释❌ URL 后不能跟任何字符,包括空格和注释 -
GET https://httpbin.org/get?name=张三❌ 中文没编码,服务端大概率 400 或收不到
光标停在这一行,按 Ctrl+Enter(macOS 是 Cmd+Enter)即可发送。响应出现在下方 Services 工具窗口的 HTTP Client 标签页里。
变量怎么定义才不报 Cannot resolve variable
变量名不能含点号 .、短横线 - 或空格,比如 api.base_url 或 auth-token 都会失败。只接受字母、数字、下划线,且必须先定义再引用。
两种定义方式都有效,但位置很关键:
- 顶部全局定义(推荐):
@host = http://localhost:8000<br>@token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9<br><br>GET {{host}}/api/users/1<br>Authorization: Bearer {{token}}
- 独立
###块定义:### @env dev<br>@host = https://api.example.com<br><br>GET {{host}}/status
常见错误:
- 把
@host = ...写在GET请求块下面 → 只在当前块生效,上面的请求用不了 -
http-client.env.json放错路径(必须在项目根目录,或手动在Settings → Tools → HTTP Client → Environment files指定) - JSON 文件里字段名和
{{xxx}}不一致,比如 JSON 是"base_url": "...",却写成{{baseUrl}}
POST JSON 请求总返回 400?检查这三点
POST 的 body 和 header 必须严格分层,空行不能少,缩进不能有,JSON 不能非法:
- 请求行后必须紧接一个空行
- Header 行必须顶格,
Content-Type: application/json不能有前导空格 - Body 必须顶格写,不能缩进,字段名和字符串值都要双引号:
POST {{host}}/api/posts<br>Content-Type: application/json<br><br>{ "title": "Hello", "body": "World" }
容易踩的坑:
- 复制 JSON 时带了全角引号或中文逗号 → 直接 400
- Body 前多了一个空行 → PhpStorm 当作两个请求解析,第二段没方法名就报错
-
Content-Type漏写或写成content-type(大小写敏感)→ 后端可能当 text/plain 解析
调试 PHP 接口时断点不命中?Xdebug 头漏了
用 HTTP Client 调试 PHP 接口,不是光写个 GET 就行——必须显式带上 Xdebug 触发头,否则断点永远不响:
- 加
XDEBUG_SESSION_START: PHPSTORM这个 header(值要和 PhpStorm 设置里的 Debug session ID 一致,默认就是PHPSTORM) - URL 必须能被本地 Web 服务解析,建议用
php -S localhost:8000 router.php启简易服务,避开 Nginx/Apache 配置干扰 - 确保 PHP CLI 和 Web SAPI 都加载了 Xdebug,且
xdebug.client_host指向宿主机 IP(Docker 里别写localhost)
如果接口走路由框架(Laravel、Slim),断点打在控制器里却不触发,大概率是因为实际执行的是 index.php 入口文件——先在入口第一行打个断点,确认通道通了再说。文件路径含中文或空格也会让 Xdebug 3.2+ 解析失败,这点很容易被忽略。

