🗣 Wd提问: api接口php
🤖 Ai回答: PHP API 接口开发指南
基本 API 接口实现
以下是一个简单的 PHP API 接口示例:
php
<?php
// 设置响应头为 JSON
header('Content-Type: application/json');
// 数据库连接信息(示例)
$host = 'localhost';
$dbname = 'api_demo';
$username = 'root';
$password = '';
try {
// 连接数据库
$db = new PDO(mysql:host=$host;dbname=$dbname, $username, $password);
$db-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo json_encode(['error' = 'Database connection failed']);
exit;
}
// 获取请求方法
$method = $_SERVER['REQUEST_METHOD'];
// 处理不同的请求方法
switch ($method) {
case 'GET':
// 获取数据
if (isset($_GET['id'])) {
// 获取单个记录
$stmt = $db-prepare(SELECT * FROM items WHERE id = :id);
$stmt-bindParam(':id', $_GET['id']);
$stmt-execute();
$result = $stmt-fetch(PDO::FETCH_ASSOC);
} else {
// 获取所有记录
$stmt = $db-query(SELECT * FROM items);
$result = $stmt-fetchAll(PDO::FETCH_ASSOC);
}
echo json_encode($result);
break;
case 'POST':
// 创建新记录
$data = json_decode(file_get_contents('php://input'), true);
if (isset($data['name']) && isset($data['description'])) {
$stmt = $db-prepare(INSERT INTO items (name, description) VALUES (:name, :description));
$stmt-bindParam(':name', $data['name']);
$stmt-bindParam(':description', $data['description']);
$stmt-execute();
$id = $db-lastInsertId();
echo json_encode(['id' = $id, 'message' = 'Item created']);
} else {
echo json_encode(['error' = 'Missing required fields']);
}
break;
case 'PUT':
// 更新记录
$data = json_decode(file_get_contents('php://input'), true);
if (isset($_GET['id']) && isset($data['name']) && isset($data['description'])) {
$stmt = $db-prepare(UPDATE items SET name = :name, description = :description WHERE id = :id);
$stmt-bindParam(':id', $_GET['id']);
$stmt-bindParam(':name', $data['name']);
$stmt-bindParam(':description', $data['description']);
$stmt-execute();
echo json_encode(['message' = 'Item updated']);
} else {
echo json_encode(['error' = 'Missing required fields or ID']);
}
break;
case 'DELETE':
// 删除记录
if (isset($_GET['id'])) {
$stmt = $db-prepare(DELETE FROM items WHERE id = :id);
$stmt-bindParam(':id', $_GET['id']);
$stmt-execute();
echo json_encode(['message' = 'Item deleted']);
} else {
echo json_encode(['error' = 'ID is required']);
}
break;
default:
echo json_encode(['error' = 'Unsupported request method']);
break;
}
?
RESTful API 最佳实践
1、使用正确的 HTTP 方法:
GET 获取资源
POST 创建资源
PUT/PATCH 更新资源
DELETE 删除资源
2、使用有意义的端点:
`/users` 用户集合
`/users/123` ID为123的用户
3、返回适当的 HTTP 状态码:
200 OK 成功
201 Created 资源创建成功
400 Bad Request 客户端错误
401 Unauthorized 未认证
404 Not Found 资源不存在
500 Internal Server Error 服务器错误
4、版本控制:
在URL中包含版本号:`/api/v1/users`
安全考虑
1、输入验证:
php
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if ($id === false $id === null) {
http_response_code(400);
echo json_encode(['error' = 'Invalid ID']);
exit;
}
2、API 密钥认证:
php
$api_key = $_SERVER['HTTP_X_API_KEY'] ?? '';
if ($api_key !== 'your-secret-key') {
http_response_code(401);
echo json_encode(['error' = 'Unauthorized']);
exit;
}
3、HTTPS 始终使用 HTTPS 保护数据传输
4、速率限制 防止滥用
完整的 MVC 风格 API 结构
/api/
├── config/
│ └── database.php
├── controllers/
│ └── UserController.php
├── models/
│ └── User.php
├── .htaccess
└── index.php
示例控制器 (UserController.php)
php
<?php
class UserController {
private $db;
public function __construct($db) {
$this-db = $db;
}
public function getUsers() {
$stmt = $this-db-query(SELECT * FROM users);
return $stmt-fetchAll(PDO::FETCH_ASSOC);
}
public function getUser($id) {
$stmt = $this-db-prepare(SELECT * FROM users WHERE id = :id);
$stmt-bindParam(':id', $id);
$stmt-execute();
return $stmt-fetch(PDO::FETCH_ASSOC);
}
// 其他方法...
}
?
入口文件 (index.php)
php
<?php
require_once 'config/database.php';
require_once 'controllers/UserController.php';
header('Content-Type: application/json');
try {
$db = new PDO(mysql:host=$host;dbname=$dbname, $username, $password);
$userController = new UserController($db);
$request = $_SERVER['REQUEST_URI'];
$method = $_SERVER['REQUEST_METHOD'];
// 简单的路由
if (preg_match('/^\/api\/users\/?$/', $request) && $method == 'GET') {
echo json_encode($userController-getUsers());
} elseif (preg_match('/^\/api\/users\/(\d+)\/?$/', $request, $matches) && $method == 'GET') {
echo json_encode($userController-getUser($matches[1]));
} else {
http_response_code(404);
echo json_encode(['error' = 'Endpoint not found']);
}
} catch(PDOException $e) {
http_response_code(500);
echo json_encode(['error' = 'Database error']);
}
?
使用框架开发 API
对于更复杂的项目,考虑使用框架如:
Laravel
Symfony
Lumen (专为 API 设计的 Laravel 微框架)
Slim
这些框架提供了路由、中间件、验证等现成功能,可以大大简化 API 开发。
希望这个指南能帮助你开始 PHP API 开发!
📣 商家广告 :
👍
0
👎
IP地址: 27.137.98.79
搜索次数: 0
提问时间: 2025-11-04 00:42:12
🛒 域名购买 :
81.biz 67.gs sjtp.cn 373.net.cn qz.gs 68.wiki 41.gold pmmm.com.cn chesou.com.cn koupin.com.cn
❓️ 热门提问 :
ps图像 站群SEO网站日志监控优化 46云服务器 常用搜索引擎有哪些 服务器冗余 我的定位服务怎么用不了了 亳州idc 香港哪里有蹦极的地方 多台主机一个显示器 台州bgp 豌豆Ai站群搜索引擎系统
🌐 域名评估 :
yu7.hl.cn opjj.com 65.com.hk CDs.com.cn tesla.ln.cn app.ln.cn vajc.cn vtolfair.org.cn yiwutoy.shop cgtq.cn
⛏ 最新挖掘 :
凯里酸汤鱼 贵阳烤脑花 都匀毛尖茶 花溪牛肉粉 贵阳烤生蚝 贵阳烤豆腐 贵阳纸包鱼 贵阳特色菜
🖌 热门作画 :
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊 :
🔗 友情链接 :
검색 엔진 개발
検索エンジン おすすめ
ai提问
🧰 站长工具 :Ai工具 whois查询 搜索
📢 温馨提示 :本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持 :本站由豌豆Ai 提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。