|
Этот документ был автоматически переведён с английского языка с помощью Claude AI. Термины из области WMO/метеорологии должны быть проверены носителем языка перед использованием в производственной среде. Смотрите оригинал на английском для авторитетной версии. |
1. Обзор
WIS2 Downloader предоставляет REST API для управления подписками и мониторинга системы.
-
Базовый URL:
http://localhost:5002 -
Спецификация OpenAPI:
http://localhost:5002/openapi -
Swagger UI:
http://localhost:5002/swagger
2. Аутентификация
В настоящее время API не требует аутентификации. В производственной среде рекомендуется разместить его за обратным прокси-сервером с аутентификацией.
3. API подписок
3.1. Список подписок
Возвращает все активные подписки.
GET /subscriptions
3.1.1. Ответ
| Статус | Описание |
|---|---|
200 |
Успех — возвращает карту тема → детали подписки |
503 |
Redis недоступен |
3.1.2. Пример
curl http://localhost:5002/subscriptions
{
"cache/a/wis2/+/data/core/weather/surface-based-observations/#": {
"topic": "cache/a/wis2/+/data/core/weather/surface-based-observations/#",
"save_path": "surface-obs",
"filters": {
"accepted_media_types": ["application/bufr", "application/grib"]
}
}
}
3.2. Создание подписки
Создаёт новую подписку на тему WIS2.
POST /subscriptions
Content-Type: application/json
3.2.1. Тело запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
|
string |
Да |
Шаблон темы MQTT WIS2. Поддерживает |
|
string |
Нет |
Подкаталог под |
|
object |
Нет |
Конфигурация фильтра. |
|
array |
Нет |
Список разрешённых типов MIME. Поддерживает подстановочные знаки (например, |
3.2.2. Ответ
| Статус | Описание |
|---|---|
202 |
Принято — подписка поставлена в очередь на обработку |
400 |
Неверный запрос — тема отсутствует или недействительна |
503 |
Сервис недоступен — ошибка подключения к Redis |
3.2.3. Заголовки ответа
| Заголовок | Описание |
|---|---|
|
URL для получения деталей подписки |
3.2.4. Пример
curl -X POST http://localhost:5002/subscriptions \
-H "Content-Type: application/json" \
-d '{
"topic": "cache/a/wis2/+/data/core/weather/surface-based-observations/#",
"target": "surface-obs",
"filters": {
"accepted_media_types": ["application/bufr", "application/grib"]
}
}'
{
"status": "accepted",
"topic": "cache/a/wis2/+/data/core/weather/surface-based-observations/#",
"target": "surface-obs"
}
3.3. Получение подписки
Возвращает детали конкретной подписки.
GET /subscriptions/{topic}
3.3.1. Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
|
string |
Тема WIS2 (только |
3.3.2. Кодирование URL
Только символ # требует URL-кодирования:
| Символ | Закодированный | Причина |
|---|---|---|
|
|
Иначе интерпретируется как фрагмент URL |
Слэши (/) и + не требуют кодирования в пути.
|
3.3.3. Ответ
| Статус | Описание |
|---|---|
200 |
Успех |
400 |
Недействительная тема |
404 |
Подписка не найдена |
503 |
Redis недоступен |
3.3.4. Пример
curl "http://localhost:5002/subscriptions/cache/a/wis2/+/data/core/weather/surface-based-observations/%23"
{
"topic": "cache/a/wis2/+/data/core/weather/surface-based-observations/#",
"save_path": "surface-obs",
"filters": {
"accepted_media_types": ["application/bufr", "application/grib"]
}
}
3.4. Удаление подписки
Удаляет подписку.
DELETE /subscriptions/{topic}
3.4.1. Параметры пути
| Параметр | Тип | Описание |
|---|---|---|
|
string |
URL-кодированная тема WIS2 |
3.4.2. Ответ
| Статус | Описание |
|---|---|
200 |
Успешно удалено |
400 |
Недействительная тема |
503 |
Redis недоступен |
3.4.3. Пример
curl -X DELETE "http://localhost:5002/subscriptions/cache/a/wis2/+/data/core/weather/surface-based-observations/%23"
{
"status": "deleted",
"topic": "cache/a/wis2/+/data/core/weather/surface-based-observations/#"
}
4. API мониторинга
4.1. Проверка работоспособности
Возвращает состояние работоспособности сервиса.
GET /health
4.1.1. Ответ
Всегда возвращает 200. Проверьте поле status для фактического состояния.
| Поле | Значения |
|---|---|
|
|
4.1.2. Пример
curl http://localhost:5002/health
{"status": "healthy"}
4.2. Метрики Prometheus
Возвращает метрики в текстовом формате Prometheus.
GET /metrics
4.2.1. Ответ
| Статус | Описание |
|---|---|
200 |
Метрики в текстовом формате Prometheus |
500 |
Ошибка генерации метрик |
4.2.2. Доступные метрики
| Метрика | Тип | Метки | Описание |
|---|---|---|---|
|
Counter |
status |
Всего обработанных уведомлений |
|
Counter |
cache, media_type |
Успешно загруженные файлы |
|
Counter |
cache, media_type |
Всего загруженных байт |
|
Counter |
reason |
Пропущенные уведомления по причине |
|
Counter |
cache, reason |
Неудачные загрузки |
|
Gauge |
queue_name |
Текущее количество задач в очереди Celery |
4.2.3. Пример
curl http://localhost:5002/metrics
# HELP wis2downloader_downloads_total Total number of files downloaded.
# TYPE wis2downloader_downloads_total counter
wis2downloader_downloads_total{cache="example.cache.com",media_type="application/bufr"} 42.0
# HELP wis2downloader_notifications_total Total notifications processed.
# TYPE wis2downloader_notifications_total counter
wis2downloader_notifications_total{status="success"} 42.0
wis2downloader_notifications_total{status="skipped"} 5.0
4.3. Спецификация OpenAPI
Возвращает спецификацию OpenAPI 3.0 в формате JSON.
GET /openapi
4.4. Swagger UI
Интерактивная документация API.
GET /
GET /swagger
5. Ответы с ошибками
Все ответы с ошибками следуют этому формату:
{
"error": "Error message describing the problem"
}
5.1. Распространённые сообщения об ошибках
| Статус | Ошибка | Причина |
|---|---|---|
400 |
"No topic provided" |
POST /subscriptions без поля topic |
400 |
"No topic passed" |
GET/DELETE с пустой темой |
404 |
"Subscription for topic X not found" |
Тема не подписана |
503 |
"Failed to connect to Redis: …" |
Redis недоступен |
503 |
"Failed to queue subscription command…" |
Ошибка Redis pub/sub |
503 |
"Failed to persist subscription…" |
Ошибка записи Redis |
6. Схемы данных
6.1. Подписка
{
"topic": "string (required) - WIS2 MQTT topic pattern",
"save_path": "string | null - Subdirectory for downloads",
"filters": {
"accepted_media_types": ["array of MIME type strings"]
}
}
6.2. Фильтры
{
"accepted_media_types": [
"application/bufr",
"application/grib",
"application/x-netcdf*"
]
}
6.2.1. Принимаемые типы медиа по умолчанию
Если фильтр не указан, принимаются следующие типы:
[
"image/gif", "image/jpeg", "image/png", "image/tiff",
"application/pdf", "application/postscript",
"application/bufr", "application/grib",
"application/x-hdf", "application/x-hdf5",
"application/x-netcdf", "application/x-netcdf4",
"text/plain", "text/html", "text/xml", "text/csv",
"text/tab-separated-values"
]
7. Справочник по шаблонам тем
7.1. Структура темы WIS2
{origin|cache}/a/wis2/{centre-id}/data/{data-policy}/{earth-system-domain}/{category}/...
-
origin- Исходные данные от поставщика данных -
cache- Кэшированная копия из глобального кэша (рекомендуется для надёжности) -
{centre-id}- Код страны/организации, с префиксом ISO2C кода страны (например,de-dwd) -
{data-policy}- Единая политика данных WMO:coreилиrecommended -
{earth-system-domain}- Область системы Земли из Единой политики данных WMO
7.2. Подстановочные знаки
| Шаблон | Символ | Описание |
|---|---|---|
Один уровень |
|
Соответствует ровно одному уровню |
Несколько уровней |
|
Соответствует нулю или более уровней (должен быть в конце) |
7.3. Примеры
| Шаблон | Соответствует |
|---|---|
|
Все данные от Deutscher Wetterdienst |
|
Приземные наблюдения со всех центров |
|
Все основные данные из любого центра |
|
Все метеорологические данные (любая политика) из любого центра |