Skip to Content
Mélodium 0.10.1 is now available!
DocsExemplesAPI SQL Utilisateurs

API SQL Utilisateurs

Source: 03_sql_user_api

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 dispatch 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.

See in Compositeur Studio

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.headers

La --> (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