Aller au contenu principal

Référence API REST

Chaque concept du framework — se connecter, lancer une requête, charger un écran, déclencher un job, dialoguer avec l'assistant — est accessible via la surface REST. Le frontend utilise les mêmes endpoints que les intégrations externes, et le document OpenAPI sur /docs (en direct, généré depuis les signatures de routes FastAPI) est parcourable comme référence développeur.

Cette page est une cartographie domaine par domaine des endpoints, avec la permission requise, la forme de la requête et la forme de la réponse pour chacun. La variante interactive est sur http://${HOST}:${PORT}/docs — le Swagger UI embarqué par le framework est la référence canonique pour les schémas requête / réponse.


Conventions

  • Chemin de base — le framework sert l'API à la racine de l'origine liée : https://liberty.example.com/api/... et https://liberty.example.com/admin/....
  • Authentification — chaque endpoint demande un token Bearer dans l'en-tête Authorization, sauf POST /auth/login, POST /auth/refresh, la paire OIDC et GET /api/healthz.
  • Type de contenu — JSON en entrée / JSON en sortie, sauf mention contraire. Les erreurs portent un corps { "detail": "..." } avec un statut non 2xx.
  • LangueX-Liberty-Lang: fr modifie les libellés de la réponse pour les endpoints qui en contiennent (écrans, dictionnaire, menus, erreurs).
  • Codes de permission identiques à ceux documentés sous Rôles et permissions. * est un caractère générique ; sql:billing:* correspond à toute requête du connecteur billing.

Santé

MéthodeCheminPermissionRéponse
GET/api/healthzaucune (public){ "ok": true, "version": "0.42.0" }

Utile pour les sondes de vivacité. Ne touche pas la base de données.


Auth

MéthodeCheminPermissionCorpsRéponse
POST/auth/loginpublic{ "username", "password" }{ "access_token", "refresh_token", "token_type": "Bearer", "expires_in": 900 }
POST/auth/refreshpublic (cookie / corps){ "refresh_token" }Identique à /auth/login.
POST/auth/logoutauthentifié{ "ok": true }. Invalide le refresh token.
GET/auth/meauthentifié{ "username", "display_name", "roles", "permissions": [...] }.
GET/auth/oidc/loginpublic302 vers l'IdP.
GET/auth/oidc/callbackpublicquery302 vers /. Pose la session locale.

Voir Authentification pour le flux OIDC.


Connecteurs et données

Connecteurs SQL

MéthodeCheminPermissionDescription
GET/api/connectorsconnectors:readListe tous les connecteurs avec type et statut.
GET/api/connectors/{name}connectors:readDéfinition du connecteur et schéma découvert.
POST/api/sql/{pool}/_schemaconnectors:readIntrospecte le schéma d'un pool (liste des tables, liste des colonnes).
GET/api/sql/{connector}/{query}sql:{connector}:{query}Exécute une requête en lecture. Les paramètres d'URL se lient aux paramètres du connecteur.
POST/api/sql/{connector}/{query}identiqueIdentique à GET mais avec un corps JSON pour des mappings complexes.
POST/api/sql/{connector}/{query}:writesql:{connector}:{query}:writeExécute une requête en écriture. Le corps est le mapping des paramètres.

Connecteurs HTTP / API

MéthodeCheminPermissionDescription
POST/api/http/{connector}/{endpoint}api:{connector}:{endpoint}Appelle un endpoint nommé. Le corps porte le mapping des paramètres.

Export Excel

MéthodeCheminPermissionDescription
POST/api/screens/{app}/{screen_id}/exportscreen:{app}:{id}Exporte la vue courante de l'écran au format XLSX. Le corps accepte les filtres actifs. La réponse est application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.

Écrans

MéthodeCheminPermissionDescription
GET/api/screensscreens:readListe tous les écrans de toutes les apps.
GET/api/screens/{app}screens:readÉcrans d'une app.
GET/api/screens/{app}/{screen_id}screen:{app}:{id}Définition de l'écran, colonnes de la grille et champs de la boîte de dialogue.
POST/api/screens/{app}/{screen_id}/lockscreen:{app}:{id}Acquiert un verrou d'enregistrement — { "key": {...} }.
DELETE/api/screens/{app}/{screen_id}/lockidentiqueLibère le verrou d'enregistrement.

Tableaux de bord et graphiques

MéthodeCheminPermissionDescription
GET/api/dashboardsdashboards:readListe tous les tableaux de bord.
GET/api/dashboards/{id}dashboard:{id}Disposition du tableau de bord et références de graphique par panneau.
GET/api/chartscharts:readListe tous les graphiques.
GET/api/charts/{id}chart:{id}Définition du graphique et données liées (quand appelé avec ?include_data=true).
POST/api/charts/{id}/datachart:{id}Rafraîchit les données d'un graphique avec un mapping de paramètres.

MéthodeCheminPermissionDescription
GET/api/menusauthentifiéTous les arbres de menus que l'appelant peut voir, élagués selon ses permissions.
GET/api/menus/{app}authentifiéL'arbre de menu d'une app.

Dictionnaire

MéthodeCheminPermissionDescription
GET/api/dictionaryauthentifiéToutes les colonnes, lookups et libellés, localisés selon X-Liberty-Lang.
GET/api/dictionary/lookups/{name}authentifiéL'ensemble de valeurs d'un lookup.

i18n

MéthodeCheminPermissionDescription
GET/api/i18n/{lang}authentifiéPaquet de langue groupé pour lang. Inclut le commun et les surcharges par app.
GET/api/i18n/_revisionsauthentifiéLa chaîne de révision de chaque paquet chargé. Le frontend l'utilise comme clé de cache.

Jobs (Nomaflow)

MéthodeCheminPermissionDescription
GET/admin/jobsjobs:readCatalogue des jobs et statut de la dernière exécution par job.
GET/admin/jobs/{name}job:{name}Définition d'un job et 50 dernières exécutions.
POST/admin/jobs/{name}/runjob:{name}Déclenche une exécution manuelle. Le corps accepte des surcharges de params. Renvoie { "run_id" }.
GET/admin/jobs/runsjobs:readListe les exécutions sur tous les jobs — filtrable par job, status, from, to.
GET/admin/jobs/runs/{run_id}job:{name}Détail complet de l'exécution avec étapes et les 1000 dernières lignes de log.
POST/admin/jobs/runs/{run_id}/abortjob:{name}Abandonne une exécution en cours.
POST/admin/jobs/runs/{run_id}/replayjob:{name}Relance avec les mêmes paramètres.
GET/admin/jobs/runs/{run_id}/logsjob:{name}Diffuse la fin du journal. ?follow=true bascule sur Socket.IO.
GET/admin/jobs/cron-preview?expression=...jobs:readAnalyse une expression cron et retourne les 5 prochains déclenchements.

Assistant IA

MéthodeCheminPermissionDescription
GET/ai/toolsai:chatLa liste d'outils que l'appelant verrait dans la discussion — utile pour déboguer les permissions.
POST/ai/chatai:chatEnvoie un tour. Diffuse en Server-Sent Events par défaut ; ?stream=false renvoie une seule réponse JSON.
GET/ai/conversationsai:chatListe les conversations de l'appelant.
GET/ai/conversations/{id}ai:chatUne conversation avec ses messages, appels d'outils et résultats.
DELETE/ai/conversations/{id}ai:chatSupprime une conversation.
POST/ai/conversations/{id}/shareai:shareProduit un lien de partage en lecture seule.

Configuration admin (backend de l'interface Paramètres)

Chaque TOML par section suit la même forme — <section> vaut l'une de : pools, connectors, dictionary, menus, screens, dashboards, charts, jobs.

MéthodeCheminPermissionDescription
GET/admin/config/{section}/parsedsettings:{section}Le TOML analysé en JSON.
PUT/admin/config/{section}/parsedsettings:{section}Remplace le TOML analysé. Le serveur re-sérialise en préservant les commentaires.
GET/admin/config/{section}/rawsettings:rawLe texte TOML brut.
POST/admin/config/{section}/rawsettings:rawRemplace le texte TOML brut.
POST/admin/config/connectors/{name}/test-sqlsettings:connectorsExécute une requête SQL — le corps contient { "query", "params" }.
POST/admin/config/api/testsettings:connectorsExécute un endpoint HTTP.
POST/admin/config/renamesettings:writeRenomme une entité dans tous les fichiers. Corps : { "scope", "from", "to" }.
POST/admin/reloadsettings:reloadRecharge les registres en mémoire. ?scope=<section> pour restreindre ; valeur par défaut all.

Licence

MéthodeCheminPermissionDescription
GET/api/licenselicense:readLa charge utile de la licence courante et son statut de vérification.
POST/admin/license/reloadlicense:writeRelit LIBERTY_LICENSE_KEY et revérifie la signature sans redémarrage complet.

Utilisateurs et rôles

MéthodeCheminPermissionDescription
GET/admin/usersusers:readListe tous les utilisateurs.
GET/admin/users/{username}users:readUn utilisateur avec ses rôles et ses permissions effectives.
POST/admin/usersusers:writeCrée un utilisateur.
PUT/admin/users/{username}users:writeMet à jour le nom affiché, les rôles, le drapeau actif.
POST/admin/users/{username}/passwordusers:writeDéfinit un nouveau mot de passe.
POST/admin/users/{username}/revokeusers:writeRévoque toutes les sessions actives.
GET/admin/rolesusers:readListe tous les rôles.
POST/admin/rolesusers:writeCrée un rôle.
PUT/admin/roles/{name}users:writeMet à jour les permissions / l'héritage / la description.
DELETE/admin/roles/{name}users:writeSupprime un rôle (refusé tant qu'il reste des membres).

Socket.IO

Le framework propose aussi un endpoint Socket.IO sur /socket.io pour les mises à jour en direct. Ce n'est pas un endpoint REST, mais il joue le même rôle :

ÉvénementSensRôle
config.reloadedserveur → clientDiffusé après un rechargement à chaud — les clients rechargent le catalogue concerné.
lock.acquired / lock.releasedserveur → clientVerrous d'enregistrement sur les écrans (visibles sur le tableau de bord Technique).
job.run.transitionedserveur → clientUne exécution de job a changé de statut (runningsucceeded / failed / aborted).
job.run.logserveur → clientUne ligne de log issue d'une exécution en cours. Filtrée par run_id.
pool.statsserveur → clientInstantané périodique du pool pour le tableau de bord Technique.
ai.chat.deltaserveur → clientUn bloc de tokens pendant un tour de discussion IA.

L'authentification est le même token Bearer qu'en REST, passé dans la charge utile auth du handshake Socket.IO.


OpenAPI

Le document OpenAPI complet est servi sur :

  • /docs — Swagger UI interactif.
  • /redoc — vue Redoc statique.
  • /openapi.json — le JSON OpenAPI 3.1 brut, adapté à la génération de code.

Chaque endpoint y est documenté avec la forme exacte de requête / réponse générée à partir des modèles Pydantic de la route — cette page est la cartographie conceptuelle ; le document OpenAPI est le contrat précis.


Conseils et bonnes pratiques

  • Utiliser /openapi.json pour générer des clients. Des outils comme openapi-typescript ou openapi-python-client produisent un SDK typé en une commande.
  • Toujours passer X-Liberty-Lang quand la réponse est affichée à un utilisateur. La valeur par défaut est en ; les libellés dans la langue cible demandent l'en-tête.
  • Préférer l'endpoint REST nommé au SQL brut. GET /api/sql/billing/invoices-for-period est auditable et contrôlé en permission ; construire du SQL côté client et le POSTer ne l'est pas (le framework le refuse de toute façon — il n'existe pas d'endpoint « exécuter du SQL arbitraire »).
  • Épingler l'en-tête Authorization sur chaque appel. Le frontend a un repli sur cookie pour le refresh token, mais la surface API requiert l'en-tête explicite — plus simple à déboguer.
  • POST /admin/reload depuis la CI après un déploiement de configuration. Un git pull sur liberty-apps ne touche pas le framework en cours d'exécution tant que le registre n'a pas été reconstruit.

Pour aller plus loin