温馨提示×

如何利用Debian LAMP实现API接口开发

小樊
45
2025-12-20 17:49:38
栏目: 智能运维

在 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 KeyJWT 校验;对敏感操作使用更严格的权限控制。
  • 数据库安全:最小权限原则、强口令、限制数据库端口访问、定期备份。
  • 性能优化:为高频查询字段建立 索引;合理使用 缓存(如 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) 放行必要端口;日志集中与监控报警。

0