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

Voir dans 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