Разработка на 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-клиентами.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.