Разработка на PHP: Как отправить JSON-ответ с заголовком Content-Type: application/json и кодом состояния 200?
Отправка корректного JSON-ответа в PHP — одна из базовых задач при разработке REST API и веб-сервисов. Чтобы клиент (браузер, мобильное приложение или другой сервис) правильно интерпретировал ответ сервера, необходимо выполнить три ключевых шага: установить HTTP-код состояния, задать заголовок Content-Type и вывести сериализованные данные.
**Базовый пример отправки JSON-ответа:**
php
‘success’,
‘message’ => ‘Данные получены успешно’,
‘data’ => [
‘id’ => 1,
‘name’ => ‘Иван Иванов’
]
];
// Сериализуем массив в JSON и выводим
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
**Важные детали и рекомендации:**
1. **Порядок вызовов важен.** Функции `http_response_code()` и `header()` должны вызываться до любого вывода в браузер. Если до них уже был выведен хотя бы один символ, PHP выдаст ошибку «Headers already sent».
2. **Флаги json_encode.** Флаг `JSON_UNESCAPED_UNICODE` предотвращает экранирование кириллицы и других Unicode-символов, что делает ответ читаемым. `JSON_PRETTY_PRINT` форматирует JSON с отступами — удобно для отладки, но увеличивает размер ответа в продакшене.
3. **Charset в заголовке.** Добавление `; charset=utf-8` к Content-Type является хорошей практикой и явно указывает кодировку.
4. **Обработка ошибок json_encode.** Функция может вернуть `false` при наличии некорректных данных. Проверяйте результат:
php
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
if ($json === false) {
http_response_code(500);
echo json_encode([‘error’ => ‘JSON encoding failed’]);
exit;
}
echo $json;
5. **Использование header() вместо http_response_code().** Альтернативный способ задать код состояния:
php
header(‘HTTP/1.1 200 OK’);
header(‘Content-Type: application/json; charset=utf-8’);
6. **Вспомогательная функция.** В реальных проектах удобно вынести логику в отдельную функцию:
php
function jsonResponse(array $data, int $statusCode = 200): void {
http_response_code($statusCode);
header(‘Content-Type: application/json; charset=utf-8’);
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
exit;
}
// Использование:
jsonResponse([‘status’ => ‘ok’, ‘result’ => $result]);
Следование этим правилам обеспечит корректную работу вашего API с любыми HTTP-клиентами.
