Exposer l'API IoT¶
Objectif : exposer les événements IoT via l'API HTTP JSON officielle du
module, sans écrire de code métier.
Ce que vous allez apprendre : register_iot_routes(router). Une seule ligne
branche les trois routes en lecture seule de Forge IoT. Le code vit dans le
paquet forge-mvc-iot ; votre application ne fait que le brancher : c'est le
principe « lock + delegate » de Forge.
Palier 2 du niveau intermédiaire de la progression IoT, après
Simuler une mesure IoT.
Ce que ce starter montre¶
- le branchement de l'API officielle avec
register_iot_routes(router); - trois routes JSON en lecture seule :
GET /api/iot/events: N derniers événements,GET /api/iot/events/{site}/{device_id}: événements d'un capteur,GET /api/iot/devices/{site}/{device_id}/count: compteur ;
- une authentification Bearer optionnelle (
FORGE_IOT_API_TOKEN).
La table iot_events est garantie par la migration livrée.
Classes Forge utilisées¶
| Classe / fonction | Rôle dans ce starter | Référence |
|---|---|---|
forge_mvc_iot.register_iot_routes |
Brancher l'API HTTP JSON officielle sur le routeur. | Forge IoT : API HTTP |
Tester¶
Après avoir injecté quelques mesures (palier précédent), interrogez l'API :
curl -k https://localhost:8000/api/iot/events
curl -k https://localhost:8000/api/iot/events/atelier/capteur-1
curl -k https://localhost:8000/api/iot/devices/atelier/capteur-1/count
Si FORGE_IOT_API_TOKEN est défini, ajoutez l'en-tête
Authorization: Bearer <token> ; sinon l'API reste ouverte (mode local).
La route¶
Ce palier n'a pas de contrôleur à créer : le code métier des trois routes
vit dans le paquet opt-in forge-mvc-iot. Votre application se contente de le
brancher via register_iot_routes(router), ajouté dans mvc/routes.py.
L'appel se place au niveau du module de routes (il enregistre lui-même ses
chemins sous /api/iot/…), pas dans le groupe public.
Comprendre ce code¶
register_iot_routes(router)enregistre les trois routes officielles d'un
coup. Vous n'écrivez aucun contrôleur : le code métier appartient au
paquet, l'application le branche explicitement (pas de découverte
automatique, principe « refuser la magie cachée »).- L'authentification est optionnelle : pas de token configuré → API ouverte
(pratique en local) ; token configuré →Authorization: Bearer <token>exigé,
sinon401. - L'API est en lecture seule : elle expose les événements, elle n'en crée
pas. L'écriture passe par le subscriber (ou la simulation).
La migration¶
L'API officielle lit la table iot_events. Créez le fichier de migration
ci-dessous (le nom commence par un horodatage), puis appliquez-le avec
forge db:init.
-- mvc/migrations/20260601180000_create_iot_events.sql
CREATE TABLE IF NOT EXISTS iot_events (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
site VARCHAR(64) NOT NULL,
device_id VARCHAR(64) NOT NULL,
kind VARCHAR(64) NOT NULL,
value DOUBLE NOT NULL,
unit VARCHAR(32) NOT NULL,
timestamp VARCHAR(40) NOT NULL,
metadata_json TEXT NULL,
received_at DATETIME(6) NOT NULL,
PRIMARY KEY (id),
INDEX idx_iot_events_site_device (site, device_id),
INDEX idx_iot_events_received_at (received_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS rend la migration idempotente : elle est sûre même
si le palier de simulation a déjà créé la table.
À retenir¶
register_iot_routes(router)branche l'API officielle en une ligne.- Le code vit dans le paquet ; l'application délègue au lieu de réécrire.
- L'auth Bearer est optionnelle, pilotée par
FORGE_IOT_API_TOKEN.
Après ce starter¶
Vous savez exposer l'API officielle. La suite : afficher les événements dans une
vraie page.