Il costruttore di API
Creare le API dell'app come pipeline di passaggi — SQL, chiamate HTTP e script — con argomenti, test integrato e documentazione generata.
Ogni API di Keplin è un'operazione GraphQL dell'app: una query che legge dati o una mutation che li scrive. Le schermate dell'app stessa, i report, i workflow e i sistemi esterni chiamano tutti le stesse API — ciò che definisci qui è l'unica strada di entrata e uscita dei dati dell'applicazione.
Un'API può avere una di due nature:
| Natura | Che cos'è | Dove si approfondisce |
|---|---|---|
| Pipeline | Una sequenza di passaggi (Query SQL, Chiamata HTTP, Script) che gira in ordine; il risultato dell'ultimo passaggio è la risposta. | Questa pagina |
| Tabella | Un blocco unico collegato a una tabella del modello dati, che genera le operazioni di lettura e scrittura (get/add/update/delete) per te. | L'API GraphQL del modello |
Questa pagina copre il costruttore in sé: creare l'API, definire gli argomenti, montare la pipeline, provare senza salvare e pubblicare.
Dove vivono le API
Dentro un'app, apri il pannello Codice nella barra laterale. La sezione API elenca le API esistenti — puoi organizzarle in cartelle con Nuova cartella — e ognuna si apre come scheda dello spazio di lavoro. L'app ha anche una pagina di riepilogo con l'elenco completo, il tipo e lo stato di ogni API, e l'indirizzo a cui vengono servite.

Nota
In cima all'elenco vedi l'indirizzo dell'app: tutte le operazioni sono servite
in un unico endpoint GraphQL, del tipo /api/graphql/gestao-clientes.
Non c'è un URL per API — c'è un campo GraphQL per API.
Creare un'API
- Nel pannello Codice, sulla riga API, premi il pulsante + (Nuova API). Il pulsante Nuova API della pagina di riepilogo ti porta allo stesso posto: lo spazio di lavoro dell'app.
- Dai un Nome. Il nome è il campo GraphQL che i client chiameranno,
perciò segui la regola: lettere, numeri e underscore, senza iniziare con un
numero — per esempio
getOportunidadesPorConta. - Premi Crea API. L'API nasce come bozza e il costruttore si apre subito dopo — è lì che decidi la natura (blocchi SQL, HTTP, script o tabella).

Dica
Se l'API sarà di Tabella, non usare prefissi come get o add nel
nome: il nome è la BASE delle operazioni. In un'API di tabella chiamata
contas si generano getContas, addContas, updateContas e
deleteContas — a seconda delle azioni che attivi.
Il costruttore a colpo d'occhio
L'intestazione del costruttore mostra il nome, un badge con il tipo
(query, mutation o tabella) e lo stato (pubblicata o
bozza). A destra restano i comandi che valgono per l'API intera:
| Comando | Che cosa fa |
|---|---|
| Pubblicata | Attiva/disattiva la pubblicazione. Un'API in bozza è visibile solo a chi la costruisce; i client esterni non la vedono. |
| Pubblica (senza sessione) | Rende l'API accessibile senza sessione né chiave API — per le schermate pubbliche dell'app. Vedi API pubbliche. |
| Salva | Salva l'API così com'è. Salvare è sempre possibile con nome e argomenti validi — anche il lavoro a metà si salva. |
Sotto, il lavoro si divide in tre schede:
| Scheda | Per che cosa |
|---|---|
| Costruisci | Identificazione, argomenti e la pipeline di passaggi. |
| Prova | Eseguire la pipeline in bozza e sperimentare l'API come un client. |
| Docs | Esempi pronti da copiare per chiamare l'API dall'esterno. |

Identificazione
Nella sezione Identificazione definisci:
- Operazione — Query — legge dati o Mutation — scrive dati. La scelta è semantica e pratica: le mutation chiedono conferma prima di ogni esecuzione di test, perché scrivono davvero.
- Nome — il campo GraphQL. Se il nome non è valido, il costruttore avvisa: "camelCase semplice: lettere, numeri e underscore, senza iniziare con un numero."
In un'API di Tabella non c'è scelta dell'operazione — le operazioni derivano dalle azioni CRUD che attivi nel blocco Tabella.
Argomenti
La sezione Argomenti dichiara i parametri che i client passano all' API. Ogni argomento ha:
| Colonna | Che cos'è |
|---|---|
| Nome | Identificatore dell'argomento (lettere, numeri, underscore; non inizia con un numero). |
| Tipo | Uno fra: String, Int, Float, Boolean, ID, JSON, Upload. |
| Obbl. | Se il client è obbligato a inviare l'argomento. |
| Default | Valore usato quando il client non invia nulla. |
| Valore di test | Solo per il pulsante Esegui della scheda Prova — non tocca i client. |
Dentro la pipeline, gli argomenti restano disponibili come :nome nei
passaggi SQL e HTTP, e come input["args"]["nome"] nel passaggio Script.

Dica
Scrivi prima la pipeline se preferisci: quando usi :unNome in un
passaggio senza averlo dichiarato, appare la fascia "Usati nella pipeline ma
non ancora dichiarati:" con un pulsante per nome — un clic e l'argomento
è creato.
File come argomento (tipo Upload)
Un argomento di tipo Upload riceve un file. In quel caso la colonna
Default lascia il posto alla scelta dell'archiviazione: Dell'app usa l'
archiviazione predefinita; in alternativa scegli una delle archiviazioni
configurate nelle impostazioni dell'app (sezione Archiviazione). Così, un'
API che riceve fatture e un'altra che riceve fotografie non devono conservare
i file nello stesso posto.
Che cosa succede quando l'API viene chiamata con un file:
- Il file viene salvato nell'archiviazione scelta.
- Nella pipeline, l'argomento smette di essere il file grezzo e diventa
un riferimento con
filename,mimeType,sizee untoken— è questo che un passaggio Script riceve ininput["args"]["nomeDoArg"]. - L'app conserva il record del file, come qualsiasi altro file inviato dagli utenti.
Per provare, la colonna del valore di test si trasforma in un selettore di file — scegline uno dal tuo computer e premi Esegui.
Atenção
Se l'app ha più archiviazioni e nessuna marcata come predefinita,
una chiamata con Upload senza archiviazione scelta viene rifiutata — la
piattaforma non ne sceglie una per te.
Dall'esterno, il file si invia come variabile multipart della richiesta GraphQL (il formato standard di upload GraphQL); dentro la piattaforma, le schermate se ne occupano per te.
La pipeline
La sezione Pipeline è dove l'API prende corpo. Le regole sono semplici:
- I passaggi girano in ordine; il risultato dell'ultimo è la risposta dell'API.
- Ogni passaggio (dal secondo in poi) può ricevere il risultato del precedente — il badge "riceve il risultato del passaggio N" lo ricorda.
- Nei passaggi SQL e HTTP, il risultato precedente è in
:prev, e accetta percorsi::prev.id,:prev.0.id. - Aggiungi passaggi con i pulsanti Query SQL, Chiamata HTTP e Script; il pulsante Tabella converte l'API alla natura di tabella (e non si combina con gli altri blocchi).
Finché non ci sono blocchi, la sezione suggerisce la strada: il default è una Tabella del modello; in alternativa, si costruisce una pipeline con i passaggi descritti qui sotto.
Passaggio Query SQL
- Scegli il Datasource — uno dei database registrati nell'app. Senza datasource, il passaggio mostra la scorciatoia per crearne il primo.
- Scrivi la query nell'editor. Scrivi
:per completare automaticamente gli argomenti; l'editor conosce le tabelle e le colonne del datasource scelto e le suggerisce mentre scrivi. - Se la query restituisce per natura una sola riga (un totale, un record per chiave), attiva Restituisci solo la prima riga — la risposta passa da elenco a oggetto.
I valori di :argumento e :prev vanno sempre parametrizzati al
database — mai concatenati nel testo della query. Questo ti protegge dall'
iniezione SQL senza alcuno sforzo.

Dica
Dal secondo passaggio, anche :prev appare nel completamento automatico —
dopo un'esecuzione di test, i suggerimenti includono i percorsi reali
del risultato precedente (es.: :prev.0.id). Per trasformare elenchi
grandi fra i passaggi, metti un passaggio di codice in mezzo.
Passaggio Chiamata HTTP
Per parlare con servizi esterni:
- Scegli il Metodo (GET, POST, PUT, PATCH o DELETE) e compila l'
URL — es.:
https://api.esempio.it/clienti/:clienteId. - Aggiungi gli Headers con Aggiungi header — per esempio
Authorizationcon il valoreBearer :token. - Nei metodi con corpo, compila il Body; attiva Invia come JSON perché il corpo parta con il tipo di contenuto corretto.
:nomeDoArg e :prev vengono sostituiti nell'URL, negli header e nel body.
Passaggio Script
Il passaggio Script esegue uno script dell'app — la stessa logica che puoi eseguire a mano o per pianificazione, ora come parte di un'API:
- Scegli lo Script nell'elenco (l'elenco mostra il nome e il linguaggio di ognuno; appaiono solo gli script attivi). Senza script, il passaggio mostra la scorciatoia per crearne il primo.
- Decidi se il passaggio Riceve il risultato del passaggio precedente — nel primo passaggio della pipeline questo interruttore non si applica.
Il contratto con lo script è chiaro: gli argomenti dell'API arrivano in
input["args"], il risultato del passaggio precedente in input["prev"], e il
valore restituito dalla funzione main(input) prosegue verso il passaggio successivo
(o è la risposta, se è l'ultimo passaggio).
Atenção
Se lo script scelto ha un tempo limite alto, il costruttore avvisa — i client dell'API restano in attesa per quel tempo nel caso peggiore. Le pipeline di risposta interattiva meritano script veloci.
Riordinare e rimuovere passaggi
Ogni card di passaggio ha le frecce per Sposta su / Sposta giù e un cestino per Rimuovi passaggio. Cambiare la pipeline invalida il risultato dell'ultimo test — torna a Esegui per vedere risultati freschi.
Provare senza salvare
La scheda Prova ha due strumenti. Il primo, Prova la pipeline (bozza), esegue la pipeline COSÌ COM'È nel costruttore, senza salvare:
- Compila i valori di test degli argomenti (nella sezione Argomenti).
- Premi Esegui. In una mutation, il costruttore chiede conferma — "Eseguire la mutation adesso?" — perché il test gira davvero contro i datasource e una mutation fa scritture reali.
- Leggi il risultato: il badge Riuscito/Errore con la durata, la
Risposta completa (le risposte molto grandi appaiono troncate), e
con più di un passaggio, il Risultato per passaggio — ogni passaggio con badge
ok/errore, per vedere esattamente dove la pipeline si è rotta. - Se i passaggi hanno scritto log (uno script che stampa, per esempio), appaiono nel blocco Log.

Il return type
Il return type è la forma della risposta nello schema GraphQL — è lui a dire ai client quali campi possono selezionare. Il costruttore lo deduce dal risultato reale: dopo ogni esecuzione guarda il blocco Return type (inferito). Se differisce da quello salvato, appare l'avviso "Questo return type non è ancora salvato." con il pulsante Salva return type — e un punto ambra sul pulsante Salva ti ricorda la stessa cosa.
Nota
Senza nessuna esecuzione, la scheda mostra il Return type attuale (quello salvato). Esegui la pipeline per dedurre il return type dal risultato reale — soprattutto dopo aver cambiato l'SQL o lo script.
Sperimentare come un client
Il secondo strumento della scheda Prova è un ambiente GraphQL interattivo puntato all'endpoint dell'app — scrivi operazioni, hai il completamento automatico dello schema e vedi le risposte. Siccome sei autenticato, appaiono anche le bozze. Il pulsante Apri in finestra apre lo stesso ambiente in una scheda del browser. I dettagli restano nel capitolo successivo, in L'API GraphQL del modello.
Pubblicare
L'interruttore Pubblicata controlla chi vede l'API:
- Bozza — la vede solo chi la costruisce (nelle sessioni autenticate, le operazioni appaiono contrassegnate come bozza). I client esterni e gli utenti dell'app non la vedono, nemmeno elencando lo schema.
- Pubblicata — entra nello schema per tutti i client con accesso.
Per salvare come pubblicata, l'API deve essere completa. Il costruttore mostra i blocchi accanto all'intestazione — per esempio "Passaggio 2: l'SQL è vuoto." oppure, in un'API di tabella, "Per salvare come pubblicata, scegli la tabella e almeno un'azione CRUD." Questi avvisi non impediscono mai il Salva come bozza: impediscono solo la pubblicazione.
Nota
Eliminare un'API pubblicata toglie l'operazione dallo schema immediatamente — i client che la chiamavano cominciano a ricevere un errore. La piattaforma avvisa prima: l'eliminazione è permanente.
La documentazione generata (scheda Docs)
La scheda Docs risponde alla domanda "come chiamo questo dall'esterno?". È generata dalla versione salvata — salva prima l'API — e mostra:
- L'endpoint (
POST /api/graphql/gestao-clientes), con il pulsante di copia. - La nota di autenticazione: l'header
x-api-keyè obbligatorio per i client esterni — le chiavi si generano in Chiavi API. Nella scheda Prova (sessione interna) non serve. - Una voce per ogni operazione dell'API con quattro blocchi pronti da copiare: Query GraphQL, Variables, curl e JavaScript (fetch). In un'API di tabella, appaiono tutte le operazioni attive (get, count, add, update, delete).

Perché no…?
- Perché non riesco a pubblicare? Manca il completamento della pipeline — leggi i blocchi accanto all'intestazione: ogni passaggio mancante è elencato con il numero e il motivo.
- Perché l'Esegui mi chiede conferma? L'API è una mutation: il test fa scritture reali. Assicurati di puntare a dati di test.
- Perché non vedo la mia API nuova nell'ambiente di test GraphQL? Salva prima — l'ambiente risponde sulla versione salvata. Le bozze salvate appaiono (sei autenticato); per i client esterni, solo quando pubblicherai.
- Perché non posso aggiungere un passaggio SQL a un'API di Tabella? Un'API Tabella non si combina con altri blocchi — rimuovi prima il blocco Tabella (o i passaggi, nel senso inverso).