Ответ и кеш
Кеширование
Срок задаётся в RouteConfig::CACHE ключом CacheConfig::TTL, в секундах.
Значение ttl | Поведение |
|---|---|
Больше 0 | Кеширование результата, в том числе для POST и других методов |
0 | Кеширование роута отключено |
| Не задано | Общая настройка модуля; применяется только к GET и HEAD |
// Кешировать результат на 5 минут; 0 — отключить кеш
RouteConfig::CACHE => [
CacheConfig::TTL => 300,
],После проверок доступа и параметров модуль выбирает источник результата:
Доступ и параметры проверены
↓
Кеширование включено?
├─ Нет → выполнить контроллер
│ └─ Сформировать ответ
│
└─ Да → результат есть в кеше?
├─ Да → сформировать ответ из кеша
└─ Нет → выполнить контроллер
└─ Сохранить результат в кеш
└─ Сформировать ответПри попадании в кеш контроллер и его события не вызываются. Схема показывает штатный ход запроса; обработчики событий могут изменить результат или остановить выполнение.
Кеш учитывает метод, адрес, контроллер, действие, TTL, формат, пользователя, клиента и параметры. Если результат зависит от других данных, отключите кеш.
После обновления карты требуется очистка кеша модуля.
Формат ответа
Формат задаётся в RouteConfig::FORMAT. По умолчанию используется JSON.
Параметр format в строке запроса имеет приоритет над картой.
JSON
// Ответ в JSON
RouteConfig::FORMAT => TypeConfig::FORMAT_JSON,Примеры: с техническими полями и без них.
XML
// Ответ в XML
RouteConfig::FORMAT => TypeConfig::FORMAT_XML,Для XML без технической обёртки контроллер должен вернуть один корневой элемент. Примеры: с техническими полями и без них.
Технические поля
Технические ключи ответа можно включить или выключить для каждого роута.
В RouteConfig::RESPONSE это задаёт ResponseConfig::TECHNICAL_KEYS_DISABLED. Если ключ не задан, используется общая настройка модуля.
// Включить технические ключи
RouteConfig::RESPONSE => [
ResponseConfig::TECHNICAL_KEYS_DISABLED => false,
],// Выключить технические ключи
RouteConfig::RESPONSE => [
ResponseConfig::TECHNICAL_KEYS_DISABLED => true,
],Структура ответов: JSON и XML. Ошибки модуля сохраняют служебную структуру.
HTTP-статус и заголовки
Задаются в массиве результата контроллера:
| Константа | Значение |
|---|---|
| ResponseConfig::STATUS | status |
| ResponseConfig::HEADERS | headers |
// Создан заказ: HTTP 201 и ссылка на него в заголовке Location
return [
ResponseConfig::STATUS => HttpStatusConfig::HTTP_STATUS_201,
ResponseConfig::HEADERS => [
'Location' => '/api/orders/501',
],
'order' => [
'id' => 501,
],
];status и headers управляют HTTP-ответом и не попадают в данные результата.
Статус по умолчанию
Если контроллер не задал статус:
| Метод | HTTP-статус |
|---|---|
| POST | 201 |
| DELETE | 204 |
| Остальные методы | 200 |
Ответ без тела
Тело ответа не отправляется:
- Для метода
HEAD - Для статусов
1xx,204,205и304