Если ты когда-нибудь думал, что API — это что-то сложное и доступное только гуру, спешу обрадовать: это не так. Сегодня мы вместе напишем простое REST API на чистом PHP, без фреймворков и лишней магии. Ты узнаешь, как это работает изнутри, и сможешь легко расширять свой код. Поехали!
Что такое API и зачем оно тебе
API (Application Programming Interface) — это набор правил, по которым программы общаются друг с другом. Представь, что ты приходишь в кафе. Ты — клиент, официант — API, а кухня — сервер. Ты говоришь официанту, что хочешь кофе, он передаёт заказ на кухню, а потом приносит тебе чашку. Ты не лезешь на кухню сам, ты просто общаешься через официанта. Так и в программировании: твой сайт или приложение отправляет запрос на API, а оно возвращает данные.
Зачем тебе это? Например, ты делаешь мобильное приложение для своего блога. Чтобы приложение могло получать статьи, нужно API. Или ты хочешь, чтобы другие разработчики использовали твои данные — тоже API. В общем, это очень полезный навык.
Структура REST API: коротко о главном
Мы будем делать REST API. REST — это стиль архитектуры, где всё строится на ресурсах и HTTP-методах. Ресурс — это, например, «пользователь» или «статья». А методы — это действия: GET (получить), POST (создать), PUT (обновить), DELETE (удалить).
Вот как это выглядит на практике:
- GET /users — получить список пользователей
- GET /users/1 — получить пользователя с id=1
- POST /users — создать нового пользователя
- PUT /users/1 — обновить пользователя с id=1
- DELETE /users/1 — удалить пользователя
Всё просто, правда? Теперь давай перейдём к коду.
Готовим окружение: что нужно для старта
Для работы нам понадобится:
- PHP версии 7.4 или выше (лучше 8.0+, там много приятных фишек)
- Локальный сервер (например, встроенный в PHP:
php -S localhost:8000) - Редактор кода (VS Code, PHPStorm — что нравится)
Никаких фреймворков не нужно. Мы напишем всё руками, чтобы понять, как это работает. Это как учиться готовить: сначала варишь суп с нуля, а потом уже пользуешься полуфабрикатами.
Пишем простейший API на PHP: от идеи до кода
Создадим файл index.php. Это будет точка входа для всех запросов. Сначала настроим обработку CORS и заголовков, чтобы API могло вызываться с других доменов.
<?php
// Разрешаем запросы с любых доменов (для разработки)
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Allow-Headers: Content-Type');
// Получаем метод запроса
$method = $_SERVER['REQUEST_METHOD'];
// Получаем путь запроса (например, /users/1)
$path = $_SERVER['REQUEST_URI'];
$path = parse_url($path, PHP_URL_PATH);
$segments = explode('/', trim($path, '/'));
// Первый сегмент — это ресурс (например, 'users')
$resource = $segments[0] ?? null;
// Второй сегмент — это id (если есть)
$id = $segments[1] ?? null;
// Простой ответ по умолчанию
$response = ['message' => 'Hello, API!'];
// Обрабатываем запрос
switch ($resource) {
case 'users':
// Здесь будет логика для пользователей
$response = ['users' => []];
break;
default:
http_response_code(404);
$response = ['error' => 'Not Found'];
break;
}
echo json_encode($response);
Это каркас. Теперь добавим простую «базу данных» — массив в памяти. В реальной жизни ты бы использовал MySQL или PostgreSQL, но для обучения сойдёт.
// Простая база данных в памяти (для примера)
$users = [
1 => ['name' => 'Иван', 'email' => 'ivan@example.com'],
2 => ['name' => 'Мария', 'email' => 'maria@example.com'],
];
Теперь обработаем методы GET, POST, PUT, DELETE. Вот полный код:
<?php
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Allow-Headers: Content-Type');
$method = $_SERVER['REQUEST_METHOD'];
$path = $_SERVER['REQUEST_URI'];
$path = parse_url($path, PHP_URL_PATH);
$segments = explode('/', trim($path, '/'));
$resource = $segments[0] ?? null;
$id = $segments[1] ?? null;
$users = [
1 => ['name' => 'Иван', 'email' => 'ivan@example.com'],
2 => ['name' => 'Мария', 'email' => 'maria@example.com'],
];
$response = [];
switch ($resource) {
case 'users':
switch ($method) {
case 'GET':
if ($id) {
if (isset($users[$id])) {
$response = $users[$id];
} else {
http_response_code(404);
$response = ['error' => 'User not found'];
}
} else {
$response = array_values($users);
}
break;
case 'POST':
$input = json_decode(file_get_contents('php://input'), true);
if (!isset($input['name']) || !isset($input['email'])) {
http_response_code(422);
$response = ['error' => 'Name and email are required'];
break;
}
$newId = max(array_keys($users)) + 1;
$users[$newId] = ['name' => $input['name'], 'email' => $input['email']];
http_response_code(201);
$response = $users[$newId];
break;
case 'PUT':
if (!$id) {
http_response_code(400);
$response = ['error' => 'ID is required'];
break;
}
$input = json_decode(file_get_contents('php://input'), true);
if (isset($users[$id])) {
$users[$id]['name'] = $input['name'] ?? $users[$id]['name'];
$users[$id]['email'] = $input['email'] ?? $users[$id]['email'];
$response = $users[$id];
} else {
http_response_code(404);
$response = ['error' => 'User not found'];
}
break;
case 'DELETE':
if (!$id) {
http_response_code(400);
$response = ['error' => 'ID is required'];
break;
}
if (isset($users[$id])) {
unset($users[$id]);
$response = ['message' => 'User deleted'];
} else {
http_response_code(404);
$response = ['error' => 'User not found'];
}
break;
default:
http_response_code(405);
$response = ['error' => 'Method not allowed'];
break;
}
break;
default:
http_response_code(404);
$response = ['error' => 'Not Found'];
break;
}
echo json_encode($response);
Вот и всё! У нас есть работающий API. Ты можешь запустить его командой php -S localhost:8000 и попробовать отправить запросы через Postman или просто в браузере.
Практические советы и лайфхаки
Вот несколько вещей, которые я выучил за годы работы с API:
- Всегда возвращай JSON. Даже если ошибка — сделай
json_encodeи установи правильный HTTP-код. - Используй версионирование. Например,
/v1/users. Это позволит менять API без поломки у клиентов. - Обрабатывай CORS. Если API будут использовать с другого домена, настрой заголовки заранее.
- Не забывай про OPTIONS. Для сложных запросов браузеры шлют предварительный запрос OPTIONS. На него нужно отвечать 200.
Сравни, что важно при разработке API:
| Аспект | Плохо | Хорошо |
|---|---|---|
| Формат ответа | Текст или HTML | JSON |
| HTTP-коды | Всегда 200 | 200, 201, 400, 404, 422 и т.д. |
| Безопасность | Никакой | Токены, проверка прав |
Что дальше? Расширяем API
Теперь, когда у тебя есть базовое API, ты можешь подключать настоящую базу данных, например MySQL. Это делается через PDO. Вот пример подключения:
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->query('SELECT * FROM users');
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
Также можно добавить авторизацию через токены. Клиент отправляет токен в заголовке Authorization: Bearer <token>, а ты проверяешь его перед выполнением операции.
И не забывай про документацию. Хорошая документация — это половина успеха. Можно использовать Swagger или просто писать README.
Итоги: что мы сегодня сделали
Мы создали простое REST API на чистом PHP без единого фреймворка. Разобрались, что такое API, какие бывают методы, и написали рабочий код с обработкой всех основных операций. Теперь ты можешь расширять его, подключать базы данных и добавлять новые ресурсы.
Главное — не бойся экспериментировать. Пиши код, ломай его, исправляй — так рождается опыт. Удачи!



