🧱 Суть
REST API – это способ обмена данными между приложениями через HTTP-запросы.
Например:
PHP-приложение
|
| HTTP-запрос
↓
Внешний API
|
↓
JSON-ответPHP может выступать в роли клиента:
- получать данные из внешних сервисов
- отправлять данные
- работать с авторизацией
- интегрироваться с платежами, картами, погодой, соцсетями и другими сервисами
Для HTTP-запросов в PHP часто используют расширение:
cURL💻 Код
Основы REST API
REST API обычно использует стандартные HTTP-методы.
| Метод | Назначение | Пример |
|---|---|---|
| GET | получить данные | получить пользователя |
| POST | создать данные | создать заказ |
| PUT | обновить данные | изменить профиль |
| PATCH | частично обновить | изменить имя |
| DELETE | удалить данные | удалить запись |
| Пример запроса: |
GET https://api.example.com/users/1Ответ:
{
"id": 1,
"name": "Alex"
}Что такое cURL
cURL – это библиотека для выполнения HTTP-запросов.
В PHP используется через функции:
curl_*Простейший запрос:
$curl = curl_init();
curl_setopt(
$curl,
CURLOPT_URL,
'https://api.example.com/users'
);
curl_setopt(
$curl,
CURLOPT_RETURNTRANSFER,
true
);
$response = curl_exec($curl);
curl_close($curl);Разбор
Создание клиента
curl_init();Создаёт объект cURL-сессии.
Настройка запроса
curl_setopt();Задаёт параметры запроса.
Например:
CURLOPT_URLадрес API.
Получение ответа
CURLOPT_RETURNTRANSFERговорит:
вернуть ответ как строку, а не вывести его сразу
Выполнение
curl_exec();Отправляет запрос.
Закрытие
curl_close();Освобождает ресурсы.
GET-запрос
Пример:
$curl = curl_init();
curl_setopt_array(
$curl,
[
CURLOPT_URL => 'https://api.example.com/users',
CURLOPT_RETURNTRANSFER => true,
]
);
$response = curl_exec($curl);
curl_close($curl);
$data = json_decode(
$response,
true
);Теперь:
$data['name'];можно использовать в коде.
Передача параметров GET
Например:
/api/users?id=10В PHP:
$params = http_build_query([
'id' => 10,
'page' => 2
]);
$url =
"https://api.example.com/users?$params";Результат:
/users?id=10&page=2POST-запрос
POST используется для отправки данных.
Пример:
$data = [
'name' => 'Alex',
'email' => 'alex@test.com'
];
$curl = curl_init();
curl_setopt_array(
$curl,
[
CURLOPT_URL => 'https://api.example.com/users',
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json'
],
CURLOPT_RETURNTRANSFER => true,
]
);
$response = curl_exec($curl);
curl_close($curl);Заголовки HTTP
Через headers передаются:
- тип данных
- токены авторизации
- ключи API
Пример:
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer TOKEN'
]Авторизация через Bearer Token
Многие API используют JWT-токены.
Запрос:
Authorization: Bearer eyJhbGci...В PHP:
curl_setopt(
$curl,
CURLOPT_HTTPHEADER,
[
'Authorization: Bearer ' . $token
]
);Работа с JSON
Большинство REST API возвращают JSON.
Получение:
$response = curl_exec($curl);
$data = json_decode(
$response,
true
);Теперь JSON:
{
"id": 5,
"name": "Alex"
}становится:
[
'id' => 5,
'name' => 'Alex'
]Отправка JSON:
$json = json_encode([
'name' => 'Alex'
]);Обработка ошибок cURL
Важно проверять результат.
Плохо:
$response = curl_exec($curl);Без проверки.
Правильно:
$response = curl_exec($curl);
if ($response === false) {
throw new Exception(
curl_error($curl)
);
}Проверка HTTP-статуса
API может вернуть:
200 OK
404 Not Found
500 Server Error
Получить код:
$status = curl_getinfo(
$curl,
CURLINFO_HTTP_CODE
);Пример:
if ($status !== 200) {
throw new Exception(
"API error: $status"
);
}Пример функции-обёртки
В реальных проектах часто создают свой клиент:
function apiRequest(
string $url
): array {
$curl = curl_init();
curl_setopt_array(
$curl,
[
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
]
);
$response = curl_exec($curl);
curl_close($curl);
return json_decode(
$response,
true
);
}Использование:
$user = apiRequest(
'https://api.example.com/user/1'
);REST API в архитектуре приложения
Часто структура выглядит так:
src/
├── Services/
│ └── WeatherApi.php
│
├── Http/
│ └── Client.php
│
└── Controllers/
└── WeatherController.php
Где:
Clientотвечает за HTTP-запросыServiceзнает конкретный APIControllerиспользует данные
Частые ошибки
Не проверять ошибки API
Плохо:
$data = json_decode(
curl_exec($curl),
true
);Если API упал – непонятно почему.
Хранить токены в коде
Плохо:
$token = "secret123";Лучше:
.envНапример:
API_TOKEN=secret123Не ограничивать время ожидания
Без timeout запрос может зависнуть.
Добавлять:
CURLOPT_TIMEOUT => 10Не проверять ответ API
Нельзя сразу доверять данным:
echo $data['name'];Лучше проверять структуру ответа.
🎯 Вывод
- REST API позволяет приложениям обмениваться данными через HTTP
- PHP может работать как клиент внешних API
- Для HTTP-запросов часто используют cURL
curl_init()создаёт запросcurl_setopt()настраивает параметрыcurl_exec()выполняет запросjson_decode()преобразует JSON в массивjson_encode()отправляет данные в JSON- всегда нужно проверять ошибки и HTTP-коды
- токены и секреты нельзя хранить в коде
- в больших проектах cURL обычно выносят в отдельный HTTP-клиент