如何在30分钟内用PHP编写REST API:分步指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

如何在30分钟内用PHP编写REST API



REST API(Representational State Transfer)是一种分布式应用程序组件在网络中交互的架构风格。在现代Web开发中,REST API是创建移动应用后端、SPA(单页应用)和微服务的标准。本文将向您展示如何在短短30分钟内用PHP编写一个简单但功能完整的REST API。



我们将创建一个支持CRUD操作(创建、读取、更新、删除)的任务列表(Todo List)管理API。您将学习如何组织路由、处理JSON请求以及连接MySQL数据库。



环境准备



您需要准备以下工具:

  • 支持PHP 7.4+的Apache或Nginx Web服务器
  • MySQL或MariaDB
  • 代码编辑器(VS Code、PhpStorm)
  • 用于测试API的Postman或curl


创建项目结构:

todo-api/├── index.php          # 入口点(路由器)├── config.php         # 数据库连接配置├── api/│   └── tasks.php      # 任务处理逻辑└── .htaccess          # URL重写配置


步骤1:配置.htaccess和入口点



创建.htaccess文件,将所有请求重定向到index.php:

RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php?url=$1 [QSA,L]


现在创建我们的主路由器index.php:

<?phpheader("Content-Type: application/json; charset=UTF-8");header("Access-Control-Allow-Origin: *");header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");header("Access-Control-Allow-Headers: Content-Type, Authorization");

// 处理预检请求if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit();}

require_once 'config.php';require_once 'api/tasks.php';

$url = isset($_GET['url']) ? rtrim($_GET['url'], '/') : '';$urlParts = explode('/', $url);$resource = $urlParts[0] ?? '';$id = $urlParts[1] ?? null;

switch ($resource) { case 'tasks': $tasks = new Tasks(); echo $tasks->handleRequest($_SERVER['REQUEST_METHOD'], $id); break; default: http_response_code(404); echo json_encode(["message" => "Resource not found"]); break;}?>


步骤2:连接数据库



创建包含连接配置的config.php:

<?phpclass Database {    private $host = "localhost";    private $db_name = "todo_api";    private $username = "root";    private $password = "";    public $conn;

public function getConnection() { $this->conn = null; try { $this->conn = new PDO( "mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password ); $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { http_response_code(500); echo json_encode(["message" => "Database connection error"]); exit(); } return $this->conn; }}?>


在MySQL中创建表:

CREATE DATABASE todo_api;USE todo_api;

CREATE TABLE tasks ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, description TEXT, status ENUM('pending', 'completed') DEFAULT 'pending', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);


步骤3:实现CRUD操作



创建包含主要逻辑的文件api/tasks.php:

博客

书籍推荐