Как написать REST API на PHP за 30 минут: для начинающих
Создание собственного REST API — это важный шаг для любого веб-разработчика. API позволяет вашему приложению общаться с другими сервисами, мобильными приложениями или фронтендом. В этой статье мы разберем, как написать простой, но полноценный REST API на чистом PHP всего за 30 минут. Вы узнаете, как обрабатывать HTTP-запросы, работать с JSON и подключать базу данных. Никаких фреймворков — только чистый PHP и понятные примеры.
Что такое REST API и зачем он нужен?
REST (Representational State Transfer) — это архитектурный стиль для создания веб-сервисов. API, построенный по принципам REST, использует стандартные HTTP-методы для работы с ресурсами:
- GET — получение данных (например, список пользователей);
- POST — создание нового ресурса;
- PUT — обновление существующего ресурса;
- DELETE — удаление ресурса.
В современной веб-разработке REST API используется повсеместно: от мобильных приложений до микросервисов. Научившись создавать его на PHP, вы сможете быстро интегрировать свои проекты с любыми клиентами.
Шаг 1: Настройка структуры проекта
Прежде чем писать код, создайте простую структуру файлов. Для нашего API потребуется всего несколько файлов:
index.php— точка входа, которая будет обрабатывать все запросы;.htaccess— для перенаправления всех запросов на index.php (если используете Apache);config.php— настройки подключения к базе данных (опционально).
Создайте файл .htaccess в корневой папке проекта:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
Этот код перенаправляет все запросы, которые не указывают на существующие файлы, на index.php. Теперь наш API будет обрабатывать любые URL, например /api/users или /api/users/1.
Шаг 2: Создание маршрутизатора и обработка запросов
Откройте файл index.php и напишите базовую логику маршрутизации. Мы будем определять HTTP-метод и URL, а затем вызывать соответствующие функции.
<?php
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
$method = $_SERVER['REQUEST_METHOD'];
$request = explode('/', trim($_SERVER['PATH_INFO'] ?? '/', '/'));
// Простейший маршрутизатор
switch ($request[0] ?? '') {
case 'users':
handleUsers($method, $request);
break;
default:
http_response_code(404);
echo json_encode(["message" => "Route not found"]);
break;
}
function handleUsers($method, $request) {
$id = $request[1] ?? null;
switch ($method) {
case 'GET':
if ($id) {
// Получить одного пользователя
echo json_encode(["message" => "Get user with id $id"]);
} else {
// Получить всех пользователей
echo json_encode(["message" => "Get all users"]);
}
break;
case 'POST':
$input = json_decode(file_get_contents("php://input"), true);
echo json_encode(["message" => "Create user", "data" => $input]);
break;
case 'PUT':
if ($id) {
$input = json_decode(file_get_contents("php://input"), true);
echo json_encode(["message" => "Update user with id $id", "data" => $input]);
} else {
http_response_code(400);
echo json_encode(["message" => "ID is required for update"]);
}
break;
case 'DELETE':
if ($id) {
echo json_encode(["message" => "Delete user with id $id"]);
} else {
http_response_code(400);
echo json_encode(["message" => "ID is required for delete"]);
}
break;
default:
http_response_code(405);
echo json_encode(["message" => "Method not allowed"]);
}
}
?>
Этот код создает простой REST API для работы с пользователями. Мы устанавливаем заголовки для работы с JSON и CORS, а затем маршрутизируем запросы в зависимости от URL. Обратите внимание на использование file_get_contents("php://input") для получения тела POST и PUT запросов.
Шаг 3: Подключение базы данных и работа с реальными данными
Теперь давайте заменим заглушки на реальную работу с базой данных. Создайте файл config.php для подключения к MySQL через PDO:
<?php
$host = 'localhost';
$dbname = 'api_db';
$username = 'root';
$password = '';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(["error" => "Database connection failed: " . $e->getMessage()]);
exit;
}
?>
Предположим, у вас есть таблица users с полями id, name и email. Подключите config.php в index.php и перепишите функции:
require_once 'config.php';
function handleUsers($method, $request) {
global $pdo;
$id = $request[1] ?? null;
switch ($method) {
case 'GET':
if ($id) {
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$id]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($user) {
echo json_encode($user);
} else {
http_response_code(404);
echo json_encode(["message" => "User not found"]);
}
} else {
$stmt = $pdo->query("SELECT * FROM users");
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($users);
}
break;
case 'POST':
$input = json_decode(file_get_contents("php://input"), true);
if (!isset($input['name']) || !isset($input['email'])) {
http_response_code(