php实现restful api需用$_server['request_method']判断http方法,用php://input读原始请求体并依content-type解析json,路由须由web服务器统一转发至入口文件后正则匹配路径参数,返回json时必须设置content-type和x-content-type-options头,并确保资源语义正确。

PHP 实现 RESTful API 不需要框架也能做,但直接手写路由和请求处理容易漏掉关键约束——比如 Content-Type 校验、405 Method Not Allowed 响应、或资源级状态码(201 Created vs 200 OK)的误用。
怎么判断当前请求是 GET/POST/PUT/DELETE
PHP 的 $_SERVER['REQUEST_METHOD'] 是唯一可靠依据,别信 $_POST 是否有值——因为 PUT/PATCH 请求体里也可能带 JSON,而 $_POST 默认只解析 application/x-www-form-urlencoded。
- 用
file_get_contents('php://input')读原始请求体,再根据Content-Type决定是否json_decode() -
$_GET仅用于查询参数(如/users?limit=10),路径参数(如/users/123)必须靠路由匹配提取 - 浏览器表单只能发
GET或POST,测试PUT/DELETE得用curl或 Postman
如何让 PHP 路由支持 /api/users/123 这种路径
Web 服务器(Nginx/Apache)必须把所有 /api/* 请求都转发给一个入口文件(如 index.php),否则 /api/users/123 会被当成静态路径 404。
- Nginx 配置关键行:
try_files $uri $uri/ /index.php?$query_string; - PHP 入口里用
parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)拿到原始路径,再正则匹配(如~^/api/users/(\d+)$~)提取 ID - 别用
$_SERVER['PATH_INFO']—— CGI 模式下它可能为空,不可靠
为什么返回 JSON 时 header 一定要设 Content-Type
不设 header('Content-Type: application/json; charset=utf-8'),前端 fetch().json() 可能抛错,尤其当响应含中文时——PHP 默认输出 text/html,浏览器按 HTML 解析 JSON 字符串会失败。
- 同时建议加
header('X-Content-Type-Options: nosniff')防 MIME 类型嗅探 -
json_encode()要检查返回值是否为false,出错时用json_last_error_msg()记日志,别直接输出null - 避免用
echo json_encode(...)后再执行其他逻辑——PHP 不会自动 flush,大响应可能卡住
真正难的不是写通接口,而是保持资源语义一致:比如 DELETE /api/users/123 必须幂等,POST /api/users 必须返回 201 并带 Location 头,这些细节在调试时最容易被忽略。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











