在PHP后端开发里,接口写完第一件事往往是自己先调通。Postman作为图形化HTTP客户端,能帮我们脱离浏览器地址栏和curl命令,直观地构造请求、查看响应并沉淀测试用例。无论是原生PHP还是基于框架写的接口,只要遵循HTTP协议,都可以在Postman里完成全流程验证。

一、准备PHP测试接口
我们先写一个最基础的原生PHP接口,用来接收GET和POST数据并返回JSON。这样后续在Postman里发请求时,能明确知道后端该收到什么、返回什么。很多初学者分不清表单提交和JSON提交在PHP里的接收差异,这个示例会把两种都覆盖到。
把下面代码保存为 api.php 放在本地服务器根目录(例如 ipipp.com 的虚拟主机或127.0.0.1环境)。接口通过判断请求方法来决定读取参数方式,GET从 $_GET 取,POST如果是JSON则从输入流解析,表单则直接用 $_POST。
<?php
header('Content-Type: application/json; charset=utf-8');
$method = $_SERVER['REQUEST_METHOD'];
if ($method === 'GET') {
$name = isset($_GET['name']) ? $_GET['name'] : '匿名';
echo json_encode(['method' => 'GET', 'name' => $name]);
exit;
}
if ($method === 'POST') {
$contentType = isset($_SERVER['CONTENT_TYPE']) ? $_SERVER['CONTENT_TYPE'] : '';
if (strpos($contentType, 'application/json') !== false) {
$raw = file_get_contents('php://input');
$data = json_decode($raw, true);
$name = isset($data['name']) ? $data['name'] : '匿名';
} else {
$name = isset($_POST['name']) ? $_POST['name'] : '匿名';
}
echo json_encode(['method' => 'POST', 'name' => $name]);
exit;
}
echo json_encode(['error' => '不支持的方法']);
二、Postman发送GET请求测试
打开Postman,点击左上角 New 选择 Request,命名为“测试GET接口”。请求方法下拉框选 GET,地址栏填入 http://127.0.0.1/api.php?name=张三。这里查询参数直接拼在URL后,PHP的 $_GET 超全局数组会自动解析。
点击 Send 后,下方响应区 Body 应选 Pretty 并选 JSON 格式,就能看到 {"method":"GET","name":"张三"}。如果返回空白或报错,先确认PHP服务已启动、文件路径正确,再检查地址是否漏写文件名。GET接口常用于列表查询、详情获取,参数都在URL里,方便分享和调试。
三、Postman发送POST请求(表单与JSON)
POST场景更容易出错。先在Postman选 POST,地址填 http://127.0.0.1/api.php。测表单提交时,点 Body 选 x-www-form-urlencoded,Key填 name,Value填 李四,Send后PHP走 $_POST 分支,返回 {"method":"POST","name":"李四"}。
测JSON提交则要选 Body 里的 raw,右侧格式下拉选 JSON,输入框写 {"name":"王五"}。此时Postman会自动加请求头 Content-Type 为 application/json,PHP端通过 php://input 读原始串再 json_decode。注意若手动在 Headers 里写错Content-Type,PHP可能误判走表单逻辑导致拿不到数据。示例请求体如下:
{
"name": "王五"
}
对应Postman操作关键在于:raw模式写JSON必须保证左侧显示的是 JSON 而非 Text,否则引号可能被转义。收到响应后同样用 Pretty 查看,确认 name 字段回显正确,说明前后端数据契约一致。
四、用环境变量与Collection管理多套地址
实际开发中我们有本地、测试、生产三套域名。Postman的 Environment 功能可避免每次手改URL。点右上角齿轮建环境,变量名填 base_url,本地值写 http://127.0.0.1,测试填 http://test.ipipp.com。建好后请求地址写成 {{base_url}}/api.php,切换环境即可整体生效。
再把相关请求拖进一个 Collection,例如“PHP后端接口调试”。Collection支持写前置脚本批量加鉴权头,也方便导出给同事。团队协作时,统一用变量代替硬地址,能大幅减少“我本地能跑你那报错”的沟通成本。下表列出常用变量类型:
| 变量作用域 | 适用场景 | 示例 |
|---|---|---|
| Environment | 切换本地/线上域名 | base_url |
| Collection | 同一组接口共用token | access_token |
| Global | 跨项目通用配置 | debug_flag |
五、写Tests脚本做自动断言
每次只看响应不够高效,Postman的 Tests 标签能用JavaScript写断言。比如在GET请求后加脚本,判断状态码是200且返回name不为空。这样回归测试时点 Runner 跑整个Collection,哪个接口挂了立刻标红。
下面脚本放在请求的 Tests 框里,语言选 JavaScript(Postman内置)。它先解析响应JSON,再断言字段。对PHP接口来说,稳定返回约定结构比单次肉眼检查更可靠,尤其当接口数量上十之后。
pm.test("状态码是200", function () {
pm.response.to.have.status(200);
});
pm.test("返回name字段", function () {
var json = pm.response.json();
pm.expect(json.name).to.be.a('string').and.not.be.empty;
});
结合上文的PHP代码,当 name 传空时接口给“匿名”,断言仍过;若改PHP让错误时返回 {"error":"..."} 不带name,脚本就会失败,提醒我们契约被破坏。把Tests沉淀下来,就是一份轻量接口文档兼监控。
六、常见坑与排查清单
第一,PHP没开错误显示时,接口500只回空白,Postman看响应码即可定位,再去看PHP错误日志。第二,JSON请求忘记设 raw 格式,Body被当表单,php://input 读不到内容。第三,本地用 http://192.168.0.1 调试手机访问时,Postman装电脑上要填电脑局域网IP而非127.0.0.1。
最后建议:每个PHP接口在Postman建好请求后就顺手写一句描述,说明参数和返回。过两周再看,比翻代码快得多。只要按上述步骤走,从写接口到自测通过基本能控制在几分钟内,联调不再靠猜。