|
Ce document a été traduit automatiquement depuis l’anglais par Claude AI. Les termes du domaine WMO/météorologique doivent être vérifiés par un locuteur natif avant toute utilisation en production. Consultez le lien:../en/[document original en anglais] pour la version faisant autorité. |
1. Vue d’ensemble
WIS2 Downloader expose une REST API pour gérer les abonnements et surveiller le système.
-
URL de base :
http://localhost:5002 -
Spécification OpenAPI :
http://localhost:5002/openapi -
Interface Swagger :
http://localhost:5002/swagger
2. Authentification
Actuellement, l’API ne nécessite pas d’authentification. En production, envisagez de la placer derrière un proxy inverse avec authentification.
3. API des abonnements
3.1. Lister les abonnements
Retourne tous les abonnements actifs.
GET /subscriptions
3.1.1. Réponse
| Statut | Description |
|---|---|
200 |
Succès — retourne la correspondance entre les topics et les détails des abonnements |
503 |
Redis indisponible |
3.1.2. Exemple
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. Créer un abonnement
Crée un nouvel abonnement à un topic WIS2.
POST /subscriptions
Content-Type: application/json
3.2.1. Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
|
string |
Oui |
Modèle de topic MQTT WIS2. Prend en charge les caractères génériques |
|
string |
Non |
Sous-répertoire sous |
|
objet |
Non |
Configuration du filtre. |
|
tableau |
Non |
Liste des types MIME autorisés. Prend en charge les caractères génériques (ex. |
3.2.2. Réponse
| Statut | Description |
|---|---|
202 |
Accepté — abonnement mis en file d’attente pour traitement |
400 |
Requête incorrecte — topic manquant ou invalide |
503 |
Service indisponible — connexion Redis échouée |
3.2.3. En-têtes de réponse
| En-tête | Description |
|---|---|
|
URL pour récupérer les détails de l’abonnement |
3.2.4. Exemple
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. Obtenir un abonnement
Retourne les détails d’un abonnement spécifique.
GET /subscriptions/{topic}
3.3.1. Paramètres de chemin
| Paramètre | Type | Description |
|---|---|---|
|
string |
Topic WIS2 (seul |
3.3.2. Encodage URL
Seul le caractère # nécessite un encodage URL :
| Caractère | Encodé | Raison |
|---|---|---|
|
|
Sinon interprété comme un fragment d’URL |
Les barres obliques (/) et + ne nécessitent pas d’encodage dans le chemin.
|
3.3.3. Réponse
| Statut | Description |
|---|---|
200 |
Succès |
400 |
Topic invalide |
404 |
Abonnement introuvable |
503 |
Redis indisponible |
3.3.4. Exemple
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. Supprimer un abonnement
Supprime un abonnement.
DELETE /subscriptions/{topic}
3.4.1. Paramètres de chemin
| Paramètre | Type | Description |
|---|---|---|
|
string |
Topic WIS2 encodé URL |
3.4.2. Réponse
| Statut | Description |
|---|---|
200 |
Supprimé avec succès |
400 |
Topic invalide |
503 |
Redis indisponible |
3.4.3. Exemple
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 de surveillance
4.1. Vérification de l’état de santé
Retourne l’état de santé du service.
GET /health
4.1.1. Réponse
Retourne toujours 200. Vérifiez le champ status pour connaître l’état réel.
| Champ | Valeurs |
|---|---|
|
|
4.1.2. Exemple
curl http://localhost:5002/health
{"status": "healthy"}
4.2. Métriques Prometheus
Retourne les métriques au format texte Prometheus.
GET /metrics
4.2.1. Réponse
| Statut | Description |
|---|---|
200 |
Métriques au format texte Prometheus |
500 |
Erreur lors de la génération des métriques |
4.2.2. Métriques disponibles
| Métrique | Type | Labels | Description |
|---|---|---|---|
|
Counter |
status |
Total des notifications traitées |
|
Counter |
cache, media_type |
Fichiers téléchargés avec succès |
|
Counter |
cache, media_type |
Total des octets téléchargés |
|
Counter |
reason |
Notifications ignorées par raison |
|
Counter |
cache, reason |
Téléchargements échoués |
|
Gauge |
queue_name |
Tâches actuellement dans la file d’attente Celery |
4.2.3. Exemple
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. Spécification OpenAPI
Retourne la spécification OpenAPI 3.0 au format JSON.
GET /openapi
4.4. Interface Swagger
Documentation API interactive.
GET /
GET /swagger
5. Réponses d’erreur
Toutes les réponses d’erreur suivent ce format :
{
"error": "Error message describing the problem"
}
5.1. Messages d’erreur courants
| Statut | Erreur | Cause |
|---|---|---|
400 |
"No topic provided" |
POST /subscriptions sans champ topic |
400 |
"No topic passed" |
GET/DELETE avec topic vide |
404 |
"Subscription for topic X not found" |
Topic non abonné |
503 |
"Failed to connect to Redis: …" |
Redis indisponible |
503 |
"Failed to queue subscription command…" |
Redis pub/sub échoué |
503 |
"Failed to persist subscription…" |
Écriture Redis échouée |
6. Schémas de données
6.1. Abonnement
{
"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. Filtres
{
"accepted_media_types": [
"application/bufr",
"application/grib",
"application/x-netcdf*"
]
}
6.2.1. Types de médias acceptés par défaut
Lorsqu’aucun filtre n’est spécifié, ces types sont acceptés :
[
"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. Référence des modèles de topics
7.1. Structure des topics WIS2
{origin|cache}/a/wis2/{centre-id}/data/{data-policy}/{earth-system-domain}/{category}/...
-
origin— Données originales provenant du fournisseur de données -
cache— Copie mise en cache depuis un Global Cache (recommandé pour la fiabilité) -
{centre-id}— Code pays/organisation, précédé du code pays ISO2C (ex.de-dwd) -
{data-policy}— Politique de données unifiée WMO :coreourecommended -
{earth-system-domain}— Domaine du système terrestre issu de la politique de données unifiée WMO
7.2. Caractères génériques
| Modèle | Symbole | Description |
|---|---|---|
Niveau unique |
|
Correspond exactement à un niveau |
Niveaux multiples |
|
Correspond à zéro ou plusieurs niveaux (doit être en fin de topic) |
7.3. Exemples
| Modèle | Correspond à |
|---|---|
|
Toutes les données du Deutscher Wetterdienst |
|
Observations de surface de tous les centres |
|
Toutes les données de base de n’importe quel centre |
|
Toutes les données météorologiques (toute politique) de n’importe quel centre |