不用框架也能写restful接口,核心是用$_server['request_method']区分http方法,json_encode()返回数据,并严格设置header('content-type: application/json; charset=utf-8'),任何输出前禁止echo、空白符或错误提示。

怎么用 PHP 快速写一个可被调用的 RESTful 接口
直接说结论:不用框架也能写,核心是靠 $_SERVER['REQUEST_METHOD'] 区分动作,用 json_encode() 返回数据,再加几行 header 设置。关键不是“多规范”,而是“别让前端拿不到数据”。
常见错误现象:405 Method Not Allowed(没处理对应 HTTP 方法)、500 Internal Server Error(没设 Content-Type 或输出了额外空格)、前端收不到 JSON(header 没写对或用了 echo 混淆)。
- 必须手动设置
header('Content-Type: application/json; charset=utf-8');,否则浏览器/前端可能当文本解析 - 所有输出前不能有任何
echo、print、空白符,包括文件末尾的换行 - 用
file_get_contents('php://input')读取 POST/PUT 的原始 body,别只依赖$_POST(它不处理 JSON) - 简单接口建议用
switch($_SERVER['REQUEST_METHOD'])分支,比一堆 if 更清晰
GET 和 POST 请求怎么分别处理才不踩坑
GET 用 $_GET 拿参数没问题,但 POST 就容易错——尤其前端发的是 JSON 格式时,$_POST 是空的,因为 PHP 默认只解析 application/x-www-form-urlencoded 和 multipart/form-data。
- GET 接口示例路径:
/api/users?id=123→ 直接取$_GET['id'],记得用filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT)过滤 - POST 接口若接收 JSON:
$raw = file_get_contents('php://input');→$data = json_decode($raw, true);,再检查$data !== null - 不要在同一个脚本里混用
$_POST和php://input,PHP 会因输入流已读完导致后者返回空字符串 - 如果用 cURL 测试,记得加
-H "Content-Type: application/json",否则服务端可能忽略 body
为什么返回 JSON 时 header 顺序和状态码这么重要
HTTP 状态码不是装饰,前端会根据它做逻辑分支;header 顺序不对,有些客户端(比如旧版 iOS WebView)会直接丢弃响应体。
- 状态码必须在任何输出之前调用
http_response_code(200)或http_response_code(404),不能晚于header() -
header()调用要在http_response_code()之后、echo json_encode(...)之前 - 常见错误:先 echo 了错误提示,再想补 header → 报
Warning: Cannot modify header information - 简单判断是否已输出:用
headers_sent($file, $line)检查,开发期建议开头就加这句做防护
要不要验证请求来源或加 Token 鉴权
纯内部系统调用可以暂时跳过,但只要接口暴露在公网或含用户数据,不加基础鉴权就是裸奔。
- 最轻量做法:校验
Authorizationheader 中的 Bearer Token,用$_SERVER['HTTP_AUTHORIZATION']读取(注意 Apache 下可能要改配置才能透传) - 别把密钥硬编码在代码里,用环境变量或配置文件(如
getenv('API_SECRET')) - Token 验证失败时,必须返回
401 Unauthorized并清空 body,不能返回 200 + 错误信息 - 如果只是临时调试,至少加个简单签名:比如要求请求带
X-Sign: md5(timestamp+secret),服务端比对时间戳是否在 30 秒内
真正难的不是写完一个接口,而是每次改参数、加字段、换状态码时,都得同步更新文档、测试用例和前端调用方式。没人会替你记住那个 user_id 字段其实叫 uid,只在 v2 接口里才改过来。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











