Default Configuration API
API для управления дефолтной конфигурацией, которая применяется ко всем устройствам без кастомных настроек.
GET /api/default/config
Получить текущую дефолтную конфигурацию.
URL: /api/default/config
Метод: GET
Теги: Default-config
Response
Status Code: 200 OK
Content-Type: application/json
Body: Объект конфигурации в формате dot notation
Пример ответа:
{
"provision.@reload": "86400",
"provision.operator.@name": "DefaultOperator",
"provision.logo.@url": "http://example.com/default_logo.png",
"provision.time.@tz": "Europe/Moscow",
"provision.time.@ntp": "pool.ntp.org",
"provision.features.mediaplayer.@enabled": "true",
"provision.features.dvr.@enabled": "false",
"provision.features.cctv.@enabled": "false",
"provision.features.vod.@enabled": "false",
"provision.tv_stream.@type": "multicast",
"provision.tv_protocols.@default": "stalker",
"provision.tv_protocols.protocol.@type": "stalker",
"provision.tv_protocols.protocol.@server": "http://default-portal.example.com",
"provision.preferences.pref_network_config.@value": "DHCP",
"provision.preferences.pref_tv.pref_tv_streamtype.@visible": "false",
"provision.preferences.pref_tv.pref_tv_udpxyaddress.@visible": "false",
"provision.preferences.pref_tv.pref_tv_middleware.@disabled": "true"
}
Примеры использования
curl http://localhost:7373/api/default/config
Python пример:
import requests
response = requests.get("http://localhost:7373/api/default/config")
default_config = response.json()
print(f"Default reload interval: {default_config['provision.@reload']}")
print(f"Default operator: {default_config['provision.operator.@name']}")
JavaScript (Frontend) пример:
const response = await fetch('http://localhost:7373/api/default/config');
const config = await response.json();
console.log('Default timezone:', config['provision.time.@tz']);
—
PUT /api/default/config/update
Частичное обновление дефолтной конфигурации (merge с существующей).
URL: /api/default/config/update
Метод: PUT
Теги: Default-config
Request Body
Content-Type: application/json
Объект с обновлениями в формате dot notation. Обновляются только указанные поля, остальные сохраняются.
{
"provision.@reload": "3600",
"provision.time.@tz": "Europe/London",
"provision.operator.@name": "NewDefaultOperator"
}
Response
Status Code: 200 OK
Content-Type: application/json
Body: Обновлённая дефолтная конфигурация (полная)
Примеры использования
Изменить интервал обновления:
curl -X PUT "http://localhost:7373/api/default/config/update" \
-H "Content-Type: application/json" \
-d '{
"provision.@reload": "3600"
}'
Изменить часовой пояс и сервер NTP:
curl -X PUT "http://localhost:7373/api/default/config/update" \
-H "Content-Type: application/json" \
-d '{
"provision.time.@tz": "America/New_York",
"provision.time.@ntp": "time.google.com"
}'
Изменить сервер портала:
curl -X PUT "http://localhost:7373/api/default/config/update" \
-H "Content-Type: application/json" \
-d '{
"provision.tv_protocols.protocol.@server": "http://new-portal.example.com"
}'
Python пример:
import requests
updates = {
"provision.@reload": "7200",
"provision.operator.@name": "MyCompany",
"provision.logo.@url": "http://mycompany.com/logo.png"
}
response = requests.put(
"http://localhost:7373/api/default/config/update",
json=updates
)
updated_config = response.json()
print(f"Updated reload: {updated_config['provision.@reload']}")
JavaScript (Frontend) пример:
const updates = {
'provision.time.@tz': 'Europe/Berlin',
'provision.features.vod.@enabled': 'true'
};
const response = await fetch('http://localhost:7373/api/default/config/update', {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(updates)
});
const updatedConfig = await response.json();
Влияние на устройства
После обновления дефолтной конфигурации:
Устройства без кастомной конфигурации немедленно начнут получать новые параметры при следующем запросе
Устройства с кастомной конфигурацией продолжат использовать свои индивидуальные настройки
Изменения применяются без перезагрузки сервиса
PUT /api/default/config/replace
Полная замена дефолтной конфигурации.
URL: /api/default/config/replace
Метод: PUT
Теги: Default-config
Предупреждение
Этот endpoint полностью заменяет дефолтную конфигурацию. Все предыдущие настройки будут удалены и заменены на новые.
Request Body
Content-Type: application/json
Полная новая конфигурация в формате dot notation:
{
"provision.@reload": "86400",
"provision.operator.@name": "NewOperator",
"provision.logo.@url": "http://newcompany.com/logo.png",
"provision.time.@tz": "Europe/Moscow",
"provision.time.@ntp": "pool.ntp.org",
"provision.features.mediaplayer.@enabled": "true",
"provision.features.dvr.@enabled": "false",
"provision.features.cctv.@enabled": "false",
"provision.features.vod.@enabled": "true",
"provision.tv_stream.@type": "unicast",
"provision.tv_protocols.@default": "stalker",
"provision.tv_protocols.protocol.@type": "stalker",
"provision.tv_protocols.protocol.@server": "http://newportal.example.com",
"provision.preferences.pref_network_config.@value": "DHCP"
}
Response
Status Code: 200 OK
Content-Type: application/json
Body: Новая дефолтная конфигурация
Примеры использования
curl -X PUT "http://localhost:7373/api/default/config/replace" \
-H "Content-Type: application/json" \
-d @complete_default_config.json
Python пример с загрузкой из файла:
import requests
import json
# Загрузить конфигурацию из файла
with open('new_default_config.json', 'r') as f:
new_config = json.load(f)
response = requests.put(
"http://localhost:7373/api/default/config/replace",
json=new_config
)
if response.status_code == 200:
print("Default configuration replaced successfully")
else:
print(f"Error: {response.status_code}")
Python пример с созданием конфигурации:
import requests
new_default = {
"provision.@reload": "86400",
"provision.operator.@name": "MyISP",
"provision.time.@tz": "Europe/Moscow",
"provision.tv_protocols.@default": "stalker",
"provision.tv_protocols.protocol.@type": "stalker",
"provision.tv_protocols.protocol.@server": "http://iptv.myisp.com"
}
response = requests.put(
"http://localhost:7373/api/default/config/replace",
json=new_default
)
replaced_config = response.json()
Рекомендации
Когда использовать update vs replace:
update — когда нужно изменить несколько конкретных параметров, сохранив остальные
replace — когда нужна полная переконфигурация или миграция на новую схему
Backup перед заменой:
Перед полной заменой рекомендуется сохранить текущую конфигурацию:
import requests
import json
from datetime import datetime
# Получить текущую конфигурацию
response = requests.get("http://localhost:7373/api/default/config")
current_config = response.json()
# Сохранить в файл с timestamp
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"backup_default_config_{timestamp}.json"
with open(filename, 'w') as f:
json.dump(current_config, f, indent=2)
print(f"Backup saved to {filename}")
# Теперь можно безопасно заменить
# ...
Валидация конфигурации
Базовая валидация формата:
def validate_config(config):
"""Проверка базовых требований к конфигурации"""
required_keys = [
"provision.@reload",
"provision.operator.@name",
"provision.tv_protocols.@default"
]
for key in required_keys:
if key not in config:
raise ValueError(f"Missing required key: {key}")
# Проверка reload
reload_value = int(config["provision.@reload"])
if reload_value < 60 or reload_value > 86400:
raise ValueError("Reload must be between 60 and 86400 seconds")
return True
# Использование
try:
validate_config(new_config)
# Отправить на сервер
except ValueError as e:
print(f"Configuration error: {e}")
—
Автоматическая документация
Полная автодокументация endpoints:
- async presentation.api.endpoints.default_config_management.get_default_config(use_case=Depends(get_default_config_use_case))[исходный код]
- Параметры:
use_case (GetDefaultConfigUseCase) –
- async presentation.api.endpoints.default_config_management.update_default_config(updates, use_case=Depends(update_default_config_use_case))[исходный код]
- Параметры:
use_case (UpdateDefaultConfigUseCase) –
- async presentation.api.endpoints.default_config_management.replace_default_config(new_config, use_case=Depends(replace_default_config_use_case))[исходный код]
- Параметры:
use_case (ReplaceDefaultConfigUseCase) –
Формат конфигурации
Dot notation
Конфигурации используют формат dot notation для представления иерархической XML структуры в плоском виде.
Правила:
Точка (
.) разделяет уровни вложенностиПрефикс
@обозначает атрибут XML элементаЭлементы без
@— это вложенные теги
Пример преобразования:
Dot notation:
{
"provision.operator.@name": "MyOperator",
"provision.time.@tz": "Europe/Moscow"
}
Эквивалентный XML:
<provision>
<operator name="MyOperator"/>
<time tz="Europe/Moscow"/>
</provision>
Сложный пример:
{
"provision.tv_protocols.@default": "stalker",
"provision.tv_protocols.protocol.@type": "stalker",
"provision.tv_protocols.protocol.@server": "http://portal.com"
}
XML:
<provision>
<tv_protocols default="stalker">
<protocol type="stalker" server="http://portal.com"/>
</tv_protocols>
</provision>
Типичные параметры
Базовые параметры:
provision.@reload— интервал обновления в секундах (3600, 86400)provision.operator.@name— название оператора
Время и локализация:
provision.time.@tz— часовой пояс (Europe/Moscow, America/New_York)provision.time.@ntp— NTP сервер (pool.ntp.org, time.google.com)
Функции:
provision.features.mediaplayer.@enabled— медиаплеер (true/false)provision.features.dvr.@enabled— DVR (true/false)provision.features.vod.@enabled— VoD (true/false)provision.features.cctv.@enabled— CCTV (true/false)
TV протоколы:
provision.tv_protocols.@default— дефолтный протокол (stalker, ministra)provision.tv_protocols.protocol.@type— тип протоколаprovision.tv_protocols.protocol.@server— URL портала
Сеть:
provision.preferences.pref_network_config.@value— DHCP или Static
UI настройки:
provision.preferences.pref_tv.pref_tv_streamtype.@visible— видимость настройкиprovision.preferences.pref_tv.pref_tv_middleware.@disabled— отключение опции