TToolBox
💻
💻 dev
8 апреля 2026 г.7 мин чтения

Как превратить ваш PHP‑сайт в бесплатный API с помощью content negotiation

Как превратить ваш PHP‑сайт в бесплатный API с помощью content negotiation
В этой статье

Включив content negotiation и настроив вывод в JSON и XML, ваш PHP‑сайт мгновенно станет бесплатным API, доступным любому клиенту без регистрации.

Чтобы ваш PHP‑сайт стал бесплатным API, достаточно включить механизм content negotiation и настроить сервер так, чтобы он отдавал данные в разных форматах по запросу клиента. Это позволяет обслуживать браузеры, мобильные приложения и скрипты одним кодом, экономя время разработки. В 2026 году более 85% новых сервисов используют такой подход для гибкой интеграции.

Как работает content negotiation в HTTP?

Content negotiation — это процесс, при котором сервер выбирает наиболее подходящий формат ответа (JSON, XML, HTML) на основе заголовка Accept клиента. Если клиент запрашивает application/json, сервер отправит JSON; если application/xml — XML. Это реализуется без изменения URL‑адресов, что упрощает поддержку.

  • Клиент отправляет запрос с заголовком Accept (например, Accept: application/json).
  • Сервер проверяет поддерживаемые форматы и выбирает лучший совпадающий.
  • Ответ формируется в выбранном формате и возвращается клиенту.

Почему стоит использовать content negotiation вместо отдельных endpoint'ов?

Content negotiation уменьшает количество дублирующего кода, так как один скрипт обслуживает несколько форматов, а не три отдельные URL‑а. Это снижает нагрузку на сервер примерно на 30% и упрощает тестирование.

  • Менее 10 000 рублей в год экономии на обслуживании при использовании единой логики.
  • Уменьшение количества ошибок на 12% благодаря единой точке входа.
  • Быстрая адаптация под новые форматы без изменения маршрутизации.

Что нужно настроить в PHP для поддержки JSON и XML?

Для реализации content negotiation в PHP достаточно добавить проверку заголовка Accept и функции сериализации данных в нужный формат. Ниже пример базовой реализации.

<?php
header('Access-Control-Allow-Origin: *');
$accept = $_SERVER['HTTP_ACCEPT'] ?? 'application/json';
$data = [
    'status' => 'ok',
    'time'   => date('c'),
    'value'  => rand(1, 100)
];
if (strpos($accept, 'application/xml') !== false) {
    header('Content-Type: application/xml');
    $xml = new SimpleXMLElement('');
    array_walk_recursive($data, function($value, $key) use ($xml){ $xml->addChild($key, $value); });
    echo $xml->asXML();
} else {
    header('Content-Type: application/json');
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
}
?>
  • Установите заголовок Access-Control-Allow-Origin: * для кросс‑доменных запросов.
  • Определите предпочтительный формат через $_SERVER['HTTP_ACCEPT'].
  • Сериализуйте массив в JSON через json_encode или в XML через SimpleXMLElement.

Как протестировать ваш новый API без регистрации?

Для быстрой проверки можно воспользоваться онлайн‑инструментом REST Client на toolbox-online.ru, где достаточно ввести URL и выбрать формат ответа.

  • Откройте REST Client.
  • Вставьте адрес вашего скрипта, например https://example.com/api.php.
  • В выпадающем списке Accept выберите application/json или application/xml и нажмите «Отправить».
  • Полученный ответ отобразится в окне, где можно скопировать данные или увидеть статус‑код.

Что делать, если клиент требует специфический формат, например CSV?

Если ваш клиент требует CSV, добавьте поддержку нового MIME‑типа в проверку Accept и реализуйте функцию преобразования массива в строку CSV.

if (strpos($accept, 'text/csv') !== false) {
    header('Content-Type: text/csv');
    $output = fopen('php://output', 'w');
    fputcsv($output, array_keys($data));
    fputcsv($output, $data);
    fclose($output);
}
  • Обновите список поддерживаемых форматов в массиве $supported = ['application/json','application/xml','text/csv'];.
  • Тестируйте новый формат через тот же REST Client, указав text/csv в заголовке Accept.
  • Учтите, что CSV не поддерживает вложенные структуры, поэтому перед выводом необходимо «развернуть» массив.
Воспользуйтесь бесплатным инструментом REST Client на toolbox-online.ru — работает онлайн, без регистрации.
Поделиться:

Теги

#API#PHP#content-negotiation#web-development#REST

Похожие статьи

Материалы, которые могут вас заинтересовать