Перейти к содержанию

Конфигурация

Эндпоинты для чтения, обновления и отката областей конфигурации Grav, включая system, site, media, security, plugins, themes и пользовательские области, задаваемые сайтом, а также конфигурацию учётных записей Flex. Для чтения нужно api.config.read, для записи — api.config.write; запись в system, security и plugins/api, а также любой доступ к управляемым инструментами областям scheduler и backups дополнительно требуют суперпользователя API. Конфигурация учётных записей доступна только суперпользователю.

Список разделов конфигурации

GET /config

Выводит области конфигурации, которые админка показывает как вкладки. Требуется api.config.read.

Ответ

{"data": ["system", "site", "media", "security", "info"]}

Коды ответов

Код Описание
200 Успех
401 Не авторизован
403 Нет разрешения api.config.read

Список всегда начинается с system и site и заканчивается на info — это клиентская вкладка с информацией о системе, а не читаемая область. Между ними, в алфавитном порядке, идут основные области media и security, а также любые пользовательские области, заданные сайтом, плагином или темой (файл user/config/<name>.yaml с соответствующей схемой конфигурации). backups включается только для суперпользователей, а scheduler в списке никогда не появляется. Настройки плагинов и тем здесь не перечисляются; читайте их как области plugins/{name} и themes/{name}.


Получение конфигурации

GET /config/{scope}

Возвращает действующую конфигурацию для области, маскируя секретные значения. Требуется api.config.read.

Параметры

Имя Тип Обязательный Описание
scope string Да Область конфигурации: system, site, media, security, backups, scheduler, plugins/{name}, themes/{name} или пользовательская область из user/config/<name>.yaml
X-Config-Environment string Нет Заголовок запроса. Слой окружения для чтения. Пустое значение, default или base указывает на базовый user/config; если заголовок отсутствует, используется активное окружение, если у него есть папка конфигурации. Неверное имя возвращает 422.

Ответ

{"data": {"title": "My Site", "author": {"name": "Admin", "email": "admin@example.com"}}, "meta": {"overrides": ["title"], "fallback": {"title": "Grav"}}}

Коды ответов

Код Описание
200 Успех. Заголовок ETag содержит значение, которое нужно отправить как If-Match при следующем обновлении.
401 Не авторизован
403 Нет api.config.read, либо область scheduler / backups запрошена без прав суперпользователя API
404 Область не найдена
422 Неверный заголовок X-Config-Environment

Тело ответа — полная конфигурация выбранного слоя, пересчитанная из YAML-файлов, поэтому чтение с X-Config-Environment: default показывает базовую конфигурацию даже при активном наложенном окружении. Пароли, ключи API и токены возвращаются замаскированными. meta.overrides перечисляет точечные пути конечных значений, которые переопределяет выбранный слой, а meta.fallback показывает значение, к которому каждый из них откатится (см. Откат конфигурации).

ETag вычисляется по сохранённым переопределениям, а не по полному телу ответа, поэтому остаётся действительным после сохранения и повторной загрузки.


Обновление конфигурации

PATCH /config/{scope}

Обновляет значения конфигурации с глубоким слиянием. Требуется api.config.write.

Параметры

Имя Тип Обязательный Описание
scope string Да Область конфигурации: system, site, media, security, backups, scheduler, plugins/{name}, themes/{name} или пользовательская область из user/config/<name>.yaml
X-Config-Environment string Нет Заголовок запроса. Слой окружения для записи. Пустое значение, default или base указывает на базовый user/config; если заголовок отсутствует, используется активное окружение, если у него есть папка конфигурации. Неверное имя или имя без папки возвращает 422.

Запрос

{"title": "Updated Site Title"}

Ответ

{"data": {"title": "Updated Site Title", "author": {"name": "Admin", "email": "admin@example.com"}}, "meta": {"overrides": ["title"], "fallback": {"title": "Grav"}}}

Коды ответов

Код Описание
200 Конфигурация обновлена
401 Не авторизован
403 Нет api.config.write, либо запись в system, security, plugins/api, scheduler или backups без прав суперпользователя API
404 Область не найдена
409 Конфликт (несовпадение ETag)
422 Пустое тело, изменённое поле не прошло валидацию по схеме, либо окружение неверно или отсутствует

Тело запроса глубоко сливается с существующей конфигурацией с использованием схемы области, поэтому такие поля, как списки файлов, заменяются, а не сливаются. Валидируются по схеме только поля, значения которых изменились. На диск записываются только значения, отличающиеся от родительского слоя, а значения, заданные через переменные окружения GRAV_CONFIG__*, никогда не сохраняются. Замаскированный секрет, отправленный обратно без изменений, сохраняет своё хранимое значение.

Ответ имеет ту же структуру, что и Получение конфигурации, и содержит заголовок X-Invalidates (config:update:<scope>, а для областей плагинов ещё plugins:update:<name> и plugins:list). Успешное сохранение вызывает onAdminSave, onAdminAfterSave и onApiConfigUpdated.

Поддерживает оптимистичный контроль конкурентного доступа через заголовок If-Match.


Откат конфигурации

POST /config/{scope}/revert

Удаляет переопределения из слоя конфигурации, чтобы значения вернулись к нижележащему слою. Требуется api.config.write.

Параметры

Имя Тип Обязательный Описание
scope string Да Область конфигурации, как в разделе Получение конфигурации
keys array Нет Точечные пути переопределений, которые нужно удалить. Обязателен, если reset не равен true.
reset boolean Нет Удалить файл слоя для этой области, отбросив все переопределения сразу. Имеет приоритет над keys.
X-Config-Environment string Нет Заголовок запроса. Слой окружения для отката. Пустое значение, default или base указывает на базовый user/config; если заголовок отсутствует, используется активное окружение, если у него есть папка конфигурации.

Запрос

{"keys": ["pages.theme", "debugger.enabled"]}

Ответ

{"data": {"pages": {"theme": "quark"}, "debugger": {"enabled": false}}, "meta": {"overrides": ["pages.markdown.extra"], "fallback": {"pages.markdown.extra": false}, "reverted": true}}

Коды ответов

Код Описание
200 Действующая конфигурация после отката
401 Не авторизован
403 Нет api.config.write, либо запись в system, security, plugins/api, scheduler или backups без прав суперпользователя API
404 Область не найдена
409 Конфликт (несовпадение ETag)
422 Не передан ни непустой массив keys, ни reset: true, либо окружение неверно

Откат ключа в базовом слое позволяет вступить в силу значению по умолчанию из ядра или плагина; откат ключа в слое окружения позволяет вступить в силу базовому значению. Если после отката в файле слоя ничего не остаётся, файл удаляется.

Ответ — действующая конфигурация после отката, с замаскированными секретами, в той же структуре, что и Получение конфигурации. meta.overrides перечисляет пути, которые по-прежнему переопределяют родительский слой, а meta.reverted сообщает, изменилось ли что-либо на диске. Откат того, что слой не переопределяет (например, reset: true, когда у слоя нет файла), всё равно возвращает 200, но meta.reverted равен false и onApiConfigUpdated не вызывается, поэтому вебхук config.updated не отправляется.

Поддерживает оптимистичный контроль конкурентного доступа через заголовок If-Match, используя тот же ETag, что и при получении конфигурации.


Получение конфигурации учётных записей

GET /config/accounts

Возвращает конфигурацию учётных записей Flex (flex.accounts, хранится в user/config/flex/accounts.yaml) — вкладку «Конфигурация» в разделе «Пользователи». Требуется admin.super.

Ответ

{"data": {"object": {"compat": {"events": true}}}}

Коды ответов

Код Описание
200 Успех. Заголовок ETag содержит значение, которое нужно отправить как If-Match при следующем обновлении.
401 Не авторизован
403 Не суперпользователь

Этот маршрут имеет приоритет над GET /config/{scope}, поэтому accounts никогда не читается как обычная область.


Обновление конфигурации учётных записей

PATCH /config/accounts

Глубоко сливает тело запроса с конфигурацией учётных записей Flex и записывает её в user/config/flex/accounts.yaml. Требуется admin.super.

Запрос

{"object": {"compat": {"events": false}}}

Ответ

{"data": {"object": {"compat": {"events": false}}}}

Коды ответов

Код Описание
200 Конфигурация обновлена
401 Не авторизован
403 Не суперпользователь
409 Конфликт (несовпадение ETag)
422 Пустое тело

Вложенные отображения сливаются, а списки заменяются целиком. Файл всегда записывается в базовый user/config, никогда в слой окружения, а значения, заданные через переменные окружения GRAV_CONFIG__*, на диск не записываются. Ответ содержит заголовок X-Invalidates: config:update:flex/accounts, а сохранение вызывает onApiConfigUpdated с областью flex/accounts.

Поддерживает оптимистичный контроль конкурентного доступа через заголовок If-Match.