API SQL Utilisateurs
Une API REST minimale reposant sur SQLite (ou PostgreSQL). Le pool de connexions à la base de données et le serveur HTTP sont tous deux déclarés comme modèles, initialisés une seule fois et partagés entre toutes les tracks de requêtes concurrentes.
Exécution
melodium run 03_sql_user_api/Compo.toml
# ou avec PostgreSQL :
melodium run 03_sql_user_api/Compo.toml --db_url postgres://user:pass@localhost/mydb$ curl http://127.0.0.1:8080/users
OK
$ curl -X POST http://127.0.0.1:8080/users -d '{"name":"Alice","email":"alice@example.com"}'
{"name":"Alice","email":"alice@example.com"}Fonctionnement
Deux modèles sont déclarés en tête de main :
model db: AppDb(db_url=db_url)
model server: HttpServer(host=|from_ipv4(|localhost_ipv4()), port=port)AppDb encapsule SqlPool avec un nombre de connexions min/max configurable. HttpServer accepte toutes les requêtes entrantes et les achemine vers le sous-traitement ayant enregistré la route correspondante.
Séquence de démarrage
Les connexions dans main imposent un ordre de démarrage strict :
connect ouvre le pool. La source connected se déclenche dès que le pool est prêt, déclenchant createTable. Ce n’est qu’après createTable.done que le serveur HTTP démarre, garantissant que le schéma existe avant qu’une requête n’arrive.
Gestionnaires de routes
listUsers et echoCreate appellent chacun connection[http_server=server](method=…, route=…) pour enregistrer leur route. Ils s’exécutent de manière concurrente et indépendante ; Mélodium crée automatiquement une nouvelle track pour chaque connexion entrante.
Le pattern bodyTrigger: trigger<byte>() convertit le flux Stream<byte> du corps entrant en un événement Block<void> de démarrage. Le statut, les en-têtes et le traitement du corps sont tous pilotés depuis ce signal unique en parallèle :
connection.data -> bodyTrigger.stream,start --> status.trigger,emit -> connection.status
bodyTrigger.start --------> headers.trigger,emit -> connection.headersLa --> (double flèche) est le fan-out : une sortie alimente deux entrées simultanément.
Dépendances
[dependencies]
std = "0.10.1" # flux de base, journalisation, structures de données
http = "0.10.1" # serveur et client HTTP
net = "0.10.1" # utilitaires d'adresses IP
json = "0.10.1" # parsing et sérialisation JSON
sql = "0.10.1" # pool de connexions SQL et requêtes
encoding = "0.10.1" # encodage / décodage UTF-8