在 Debian 上用 LAMP 搭建 API 接口
一 环境准备与安装
- 更新系统并安装组件(Debian 12 默认仓库以 MariaDB 为主,兼容 MySQL;如需 MySQL 可按需安装):
- 安装 Apache、MariaDB、PHP 及常用扩展:
- sudo apt update
- sudo apt install apache2 mariadb-server php libapache2-mod-php php-mysql
- 启动并开机自启服务:
- sudo systemctl start apache2 mariadb
- sudo systemctl enable apache2 mariadb
- 安全加固数据库(设置 root 密码、移除匿名用户等):
- sudo mysql_secure_installation
- 验证安装:
- 访问 http://服务器IP 应看到 Apache 默认页
- 在 /var/www/html 创建 info.php 输出 phpinfo() 验证 PHP
- 说明:Debian 12 官方仓库通常提供 MariaDB 作为 MySQL 的替代;若你明确需要 MySQL,可另行添加 MySQL 官方仓库后安装。
二 数据库与示例数据
- 登录数据库并创建库、用户与表:
- mysql -u root -p
- CREATE DATABASE myapi CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- CREATE USER ‘myuser’@‘localhost’ IDENTIFIED BY ‘mypassword’;
- GRANT ALL PRIVILEGES ON myapi.* TO ‘myuser’@‘localhost’;
- FLUSH PRIVILEGES;
- USE myapi;
- CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL
);
- INSERT INTO users (name, email) VALUES (‘John Doe’, ‘john@example.com’), (‘Jane Smith’, ‘jane@example.com’);
- 以上为后续 API 示例提供数据支撑。
三 编写第一个 API 接口
- 在站点根目录(如 /var/www/html)创建 api.php:
-
$method = $_SERVER[‘REQUEST_METHOD’] ?? ‘GET’;
$id = $_GET[‘id’] ?? null;
// 连接数据库
$conn = new mysqli(‘localhost’, ‘myuser’, ‘mypassword’, ‘myapi’);
if ($conn->connect_error) {
http_response_code(500);
echo json_encode([‘error’ => ‘Database connection failed’]);
exit;
}
$conn->set_charset(‘utf8mb4’);
// 处理请求
if ($method === ‘GET’) {
if ($id) {
$stmt = $conn->prepare(‘SELECT id, name, email FROM users WHERE id = ?’);
$stmt->bind_param(‘i’, $id);
$stmt->execute();
$res = $stmt->get_result();
$user = $res->fetch_assoc();
echo $user ? json_encode($user) : json_encode([‘error’ => ‘Not found’], JSON_UNESCAPED_UNICODE);
} else {
$res = $conn->query(‘SELECT id, name, email FROM users ORDER BY id DESC’);
echo json_encode($res->fetch_all(MYSQLI_ASSOC));
}
} elseif ($method === ‘POST’) {
$input = json_decode(file_get_contents(‘php://input’), true);
$name = trim($input[‘name’] ?? ‘’);
$email = trim($input[‘email’] ?? ‘’);
if (!$name || !$email || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
http_response_code(400);
echo json_encode([‘error’ => ‘Invalid input’]);
exit;
}
$stmt = $conn->prepare(‘INSERT INTO users (name, email) VALUES (?, ?)’);
$stmt->bind_param(‘ss’, $name, $email);
if ($stmt->execute()) {
http_response_code(201);
echo json_encode([‘id’ => $conn->insert_id, ‘name’ => $name, ‘email’ => $email]);
} else {
http_response_code(500);
echo json_encode([‘error’ => ‘Insert failed’]);
}
} else {
http_response_code(405);
echo json_encode([‘error’ => ‘Method not allowed’]);
}
$conn->close();
?>
- 测试:
- GET 单条:curl -i “http://服务器IP/api.php?id=1”
- GET 列表:curl -i “http://服务器IP/api.php”
- POST 新增:curl -i -X POST -H “Content-Type: application/json” -d ‘{“name”:“Tom”,“email”:“tom@example.com”}’ http://服务器IP/api.php
- 要点:使用 预处理语句 防止 SQL 注入;统一输出 JSON;设置 CORS 便于前端跨域调用。
四 安全与优化
- 输入校验与输出编码:对所有输入进行类型、长度、格式校验;输出统一用 json_encode,避免直接输出未过滤数据。
- 错误处理:生产环境避免泄露堆栈与敏感信息,统一返回错误码与简洁消息。
- 身份认证与授权:为接口增加 API Key 或 JWT 校验;对敏感操作使用更严格的权限控制。
- 数据库安全:最小权限原则、强口令、限制数据库端口访问、定期备份。
- 性能优化:为高频查询字段建立 索引;合理使用 缓存(如 Redis/Memcached);开启 OPcache;静态资源使用 CDN。
- Web 服务器与 PHP 调优:启用 HTTP/2、压缩(mod_deflate/gzip)、长连接;调整 PHP-FPM 进程模型与内存限制;分离静态资源与动态接口路径。
五 进阶方案与部署
- 使用框架提升效率与可维护性:
- 在 Debian 上安装 PHP Composer,创建 Laravel 项目,配置 Nginx/PHP-FPM,通过 Artisan 生成控制器与 API 路由,内置 Eloquent ORM、验证、分页、资源路由等,适合中大型 API 项目。
- 文档与规范:
- 结合 OpenAPI/Swagger 生成在线接口文档,便于前后端协作与自动化测试;在 Debian 上可通过相应工具链集成 Swagger UI 或生成规范文件。
- 部署与运维:
- 使用 systemd 管理 Apache/PHP-FPM;配置 Let’s Encrypt 免费证书启用 HTTPS;对外仅暴露 80/443;设置 防火墙(UFW) 放行必要端口;日志集中与监控报警。