MallaDocs

Requêtes et intégrations

Connectez REST, GraphQL et le CMS, gardez les secrets côté serveur et choisissez le mode statique, serveur ou client.

Guide utilisateur

Les intégrations connectent une fois pour toutes un site à un service externe. Les requêtes utilisent une intégration pour récupérer des données sur une page, et les liaisons lisent le résultat sous la forme queries.name.data.

Intégrations

RESTN’importe quelle API JSON avec une URL de base, des en-têtes par défaut et une authentification none, bearer, basic ou par clé d’API.
GraphQLUn point de terminaison plus l’authentification. Le schéma est introspecté une fois pour alimenter l’autocomplétion.
CMSIntégré, sans configuration. Listez et récupérez des éléments avec filtres, tris et références.
PostgreSQLN’importe quel Postgres (Neon, Supabase, RDS…) : SQL paramétré sur TLS, requêtes en lecture seule, jusqu’à 1 000 lignes.
SupabaseSélectionnez, insérez, mettez à jour, supprimez et appelez des fonctions via l’API REST, avec la sécurité au niveau des lignes.
AirtableListez les enregistrements par vue ou par formule, et créez-les, modifiez-les ou supprimez-les.
Google SheetsLisez les lignes comme des objets, ajoutez des lignes et mettez à jour des plages avec un compte de service.
ResendEnvoyez des e-mails transactionnels depuis les workflows.
Claude et OpenAIGénérez, résumez et extrayez du texte, éventuellement en JSON conforme à un schéma.

Ajoutez-en une dans l’espace de travail Data. Renseignez les paramètres de connexion, saisissez les secrets (jetons, mots de passe, clés d’API), enregistrez, puis cliquez sur Run test sous Test connection. Les administrateurs créent et modifient les intégrations ; les éditeurs peuvent les utiliser dans des requêtes et les tester.

Ce qu’il vous faut

Les libellés du formulaire viennent des noms des paramètres : ils s’affichent donc comme Base url ou Ssl.

  • REST : la Base url, et pour l’authentification un Bearer token, un Username et un Password d’authentification basic, ou une API key avec le nom de son en-tête ou de son paramètre de requête.
  • GraphQL : l’Endpoint, et un Bearer token ou une API key s’il demande une authentification.
  • PostgreSQL : Host, Port, Database, User et Password, tirés des informations de connexion de votre fournisseur (dans Neon, Connect sur le tableau de bord du projet ; dans Supabase, Connect en haut du projet).
  • Supabase : la Project url et une API key issues des réglages d’API du projet. La clé anon respecte la sécurité au niveau des lignes ; la clé service-role la contourne, alors réservez-la aux workflows serveur.
  • Airtable : le Base id (la partie app… de l’URL de la base) et un Personal access token avec data.records:read (et data.records:write pour modifier les enregistrements) sur cette base.
  • Google Sheets : le Spreadsheet id tiré de l’URL de la feuille, et une Service account key (JSON), la feuille étant partagée avec l’adresse e-mail du compte de service. Une API key suffit pour lire les feuilles publiées sur le web.
  • Resend : un expéditeur Default from sur un domaine vérifié dans Resend, et une API key ; une clé limitée à l’envoi suffit.
  • Claude : une API key depuis la Claude Console.
  • OpenAI : une API key depuis la plateforme OpenAI. Base url peut pointer vers n’importe quelle API compatible OpenAI.
Une requête client sur le site publié
NavigateurDemande à Malla d’exécuter la requête.
EdgeVérifie l’accès à la page et la limitation de débit.
ExécuteurDéchiffre les secrets, appelle l’API.
Votre APINe voit jamais le navigateur du visiteur.

PostgreSQL

Renseignez l’hôte, le port, la base de données et l’utilisateur, et le mot de passe comme secret. Utilisez un rôle qui n’a que les droits dont le site a besoin. Écrivez le SQL avec des espaces réservés $1, $2… et passez les valeurs dans params ; les valeurs ne sont jamais collées dans le SQL. Query s’exécute dans une transaction en lecture seule et ne peut donc pas modifier les données ; Execute peut écrire. Les résultats reviennent sous la forme { rows, rowCount, columns, truncated } : définissez le chemin de réponse sur rows pour une liste de collection.

Créer une requête

  1. Choisissez l’intégration et l’opération

    Par exemple REST Request, GraphQL Query ou CMS List items.

  2. Renseignez l’entrée

    N’importe quelle valeur d’entrée peut être une expression. Lisez des variables pour que la requête réagisse : vars.search, page.params.slug.

  3. Choisissez quand elle s’exécute

    Choisissez un mode (voir ci-dessous). Exécutez-la une fois dans l’éditeur pour voir le résultat et obtenir l’autocomplétion sur ses champs.

  4. Affinez le résultat

    Définissez un response path comme data.items pour que queries.products.data soit le tableau voulu.

json
{
  "name": "products",
  "integrationId": "int_shop_api",
  "operation": "rest.request",
  "input": {
    "method": "GET",
    "path": "/products",
    "query": { "search": { "$expr": "vars.search" } }
  },
  "responsePath": "data.items",
  "run": { "mode": "client", "on": "load", "debounceMs": 250 }
}

Statique, serveur ou client

ModeS’exécuteÀ utiliser pour
Staticà la publication ; le résultat est intégré au HTMLles pages marketing, le contenu du CMS, le meilleur SEO
Serverà chaque requête sur l’edge, avec un cache facultatif de N secondesles données fraîches ou personnalisées qui doivent quand même être indexées
Clientdans le navigateur, au chargement et à chaque changement de ses entrées (avec anti-rebond), ou uniquement depuis des workflowsla recherche, les filtres, les tableaux de bord

Lire une requête

  • queries.name.data : le résultat.
  • queries.name.loading : vrai pendant l’exécution. Liez-y la visibilité d’un indicateur de chargement.
  • queries.name.error : { message, code } ou null.
  • queries.name.updatedAt : le moment où le dernier résultat est arrivé.

Rechargez une requête client depuis un workflow avec Refetch query. Pour exécuter depuis une page une opération qui écrit des données ou coûte de l’argent, utilisez Run server workflow avec un workflow serveur appelé depuis les pages. Les listes de collection affichent les résultats des requêtes sous forme de liste.