Documentazione
Riferimento API
Il riferimento completo alle risorse HTTP, l'accesso locale autenticato, i contratti di streaming e i client generati da schemi condivisi.
Tradotto automaticamente dall'inglese. Vedi l'originale in inglese
Panoramica
Il sidecar è un unico effetto HttpApi. Ogni endpoint è tipizzato HttpApiEndpoint con corpi di richiesta e risposta controllati dallo schema, quindi questo riferimento, l'SDK generato e il server in esecuzione provengono dalla stessa dichiarazione in packages/api.
Su 232 percorsi e 35 gruppi di risorse.
Forme di richiesta, risposta ed errore, ciascuna collegata dalle operazioni che la utilizzano.
Emesso dal sidecar a /api/openapi.json; l'istantanea dentro packages/web è controllato da bun run check:api-reference.
La visualizzazione web desktop, il compagno mobile, il bridge AI e gli script chiamano tutti questi stessi percorsi.
URL di base
Non esiste un'API CADCAMFUN ospitata. Il sidecar funziona sulla tua macchina, si lega 127.0.0.1 su una porta scelta dal sistema operativo (è in ascolto sulla porta 0), controlla la propria /api/healthe solo allora stampa una riga JSON su stdout. L'URL di base è http://127.0.0.1:<port> da quella linea.
export CADCAMFUN_TOKEN=dev-token
CADCAMFUN_DATA_DIR=$(mktemp -d) \
CADCAMFUN_MIGRATIONS_DIR=$PWD/packages/db/drizzle \
CADCAMFUN_AI_OFFLINE=true \
bun --no-env-file apps/sidecar/src/main.ts
# stdout: {"event":"ready","port":46709}
export CADCAMFUN_URL=http://127.0.0.1:46709 La porta cambia ad ogni lancio
ready linea (la shell del desktop fa esattamente questo) invece di assumere un numero fisso. I log vanno a stderr quindi stdout trasporta solo l'evento ready o error. Autenticazione
Il contratto dichiara uno schema di sicurezza, bearer (HTTP Bearer). 324 di 325 operazioni lo richiedono; soltanto GET /api/health è pubblico.
| Credenziali | Inviato come | Utilizzato da |
|---|---|---|
| Gettone di avvio | Authorization: Bearer <token> | La visualizzazione web desktop e gli script locali; il valore di CADCAMFUN_TOKEN. |
| Gettone compagno | Authorization: Bearer <token> | Un telefono accoppiato; accesso più ristretto, vedi abbinamento di compagni. |
| Sessione di conto | x-session-token | Seleziona il conto attivo sopra il token al portatore; Vedere identità sotto. |
curl -s "$CADCAMFUN_URL/api/health"
curl -s "$CADCAMFUN_URL/api/projects" -H "Authorization: Bearer $CADCAMFUN_TOKEN" Convenzioni
- JSON dentro, JSON fuori. I corpi sono
application/jsona meno che una scheda non indichi diversamente: due caricamenti in più parti, un webhook con flusso di ottetti, un bootstrap JavaScript, un download zip, un file plugin binario e due flussi di eventi. - Gli ID delle operazioni sono punteggiati.
projects.get,vcs.commit: il tag del gruppo, un punto, il nome del metodo utilizzato dai client generati. - Gli errori vengono digitati. Gli errori vengono dichiarati per endpoint e portano a
_tag; accenderlo invece di analizzare i messaggi. Nel contratto, 401 viene dichiarato su 269 operazioni, 500 su 264 e 400 su 206. - Gli ancoraggi operativi sono stabili. Ogni carta è collegabile come
#op-<method>-<path>, per esempio/docs/api/projects#op-get-api-projects-id.
Streaming
| Sentiero | Forma | Porta |
|---|---|---|
GET /api/projects/{id}/events | SSE | Modifica gli eventi per un progetto. |
POST /api/ai/chat/stream | SSE | Output dell'assistente così come viene prodotto, più battiti cardiaci; Vedere Trasmissione tramite intelligenza artificiale. |
curl -N "$CADCAMFUN_URL/api/projects/$PROJECT_ID/events" \
-H "Authorization: Bearer $CADCAMFUN_TOKEN" Clienti
@cadcamfun/api/sdk viene generato da questo stesso contratto: ogni ID operazione seguente è un metodo tipizzato su CadCam.make(...), prendendo un input semplice di parametri del percorso e campi del corpo. Vengono generate 259 delle 325 operazioni; ogni carta mostra la sua chiamata esatta.
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
const projects = await client.projects.list()
const created = await client.projects.create({ name: "Bracket" }) Risorse
325 operazioni in 35 gruppi, organizzate in base a ciò che servono.
Nucleo
1 endpointsSonda sull'integrità del processo pubblico con stato e timestamp.
2 endpointsDisponibilità autenticata e versione dell'applicazione utilizzata dai client nativi.
2 endpointsEventi inviati dal server nell'ambito del progetto per client live.
4 endpointsPreferenze compatibili con JSON e voci di contesto con elenco di prefissi e operazioni per chiave.
2 endpointsOperazioni di caricamento e download con payload specifico dell'endpoint e codifica della risposta.
Progetto
5 endpointsCrea, elenca, leggi, aggiorna e rimuovi progetti con controlli di accesso del proprietario e dell'organizzazione.
8 endpointsDisegni di progetto, componenti, percorsi utensile, risorse di libreria e anteprime limitate di sola lettura per i client associati.
7 endpointsDisegni di progetto e geometria salvata, metadati e operazioni di aggiornamento.
5 endpointsComponenti di progetto riutilizzabili e relativi dati di progettazione persistenti.
5 endpointsAnalizza la geometria esatta, esporta STEP e controlla le relazioni degli assiemi da istantanee di scene o disegni salvati.
8 endpointsRecord di librerie condivise e raccolte di ricerca di componenti, materiali e strumenti.
Produzione
9 endpointsProgrammi di lavorazione salvati, associazioni di disegni e documenti di produzione portatili convalidati.
2 endpointsElenco e creazione di percorsi utensile nell'ambito del progetto con inviluppi di risposta specifici dell'endpoint.
5 endpointsProduzione nativa, generazione di codici G basata sulle impostazioni, suggerimenti, analisi e verifica della riproduzione.
8 endpointsVersioni del percorso utensile, ripristino, rilevamento delle librerie e commenti sui programmi in thread.
21 endpointsStime, richieste di calcolo, costi dei materiali, costi operativi e registrazioni dell'usura degli utensili.
Risorse
5 endpointsRecord dei materiali, proprietà di lavorazione dell'applicazione e accesso alle risorse.
5 endpointsAllegati per l'archiviazione dei materiali e importazione/esportazione JSON per lo scambio di librerie.
5 endpointsRegistrazioni e dimensioni della taglierina utilizzate dai flussi di lavoro di lavorazione dell'applicazione.
7 endpointsDati di archiviazione e raccolta degli utensili o importazione/esportazione per utensile.
7 endpointsRecord di configurazione della macchina, aggiornamenti, rimozione e clonazione.
5 endpointsAllegati archiviazione macchina e import/export configurazioni.
Estensioni
52 endpointsProvider, credenziali, conversazioni, turni di streaming, invocazione di azioni, token bridge, competenze e ripristino della sessione.
22 endpointsCommit, ramificazioni, ripristini, revisioni, mirroring GitHub e invio del flusso di lavoro compatibili con Project Git.
16 endpointsRegistro dei plugin, installazione dei pacchetti, configurazione, abilitazione/disabilitazione e risorse dei plugin serviti.
8 endpointsCRUD di configurazione della connessione MCP e richieste di informazioni sul server.
5 endpointsStato del gateway desktop, attivazione/disattivazione, associazione e revoca del dispositivo.
Conti
15 endpointsAccesso all'account, registrazione, ripristino, verifica, collegamenti magici, ricerca di sessioni e registrazione della passkey.
18 endpointsProfili, risorse dell'account, chiavi API, record di token, password e rimozione dell'account.
5 endpointsElenchi di organizzazioni e record di organizzazioni gestite.
4 endpointsElenco delle notifiche, aggiornamenti dello stato di lettura, eliminazione e contrassegna tutti i letti.
15 endpointsInformazioni sull'abbonamento, integrazione del portale/checkout Stripe, manutenzione di prova e acquisizione di webhook firmati.
10 endpointsMetriche dell'applicazione, attività recente, query sull'utilizzo e richieste di monitoraggio.
10 endpointsPercorsi di integrazione desktop, operazioni di progetto monitorate, notifiche e record di sottoscrizione push.
1 endpointsInvia la registrazione alla lista d'attesa tramite l'API dell'applicazione locale.
Documento OpenAPI
Scaricamento /docs/api/openapi.json (l'istantanea archiviata resa da questo sito) o recupera il documento live da un sidecar in esecuzione su /api/openapi.json. Rigenera lo snapshot con bun run generate:api-reference in packages/web dopo aver modificato un endpoint.
Contratto e server
@cadcamfun/api definisce gli schemi di richiesta e risposta con effetto HttpApi. Esporta la radice Api, record di dominio, errori contrassegnati e client. I gestori delle richieste, le decisioni di autorizzazione, le query del database e le chiamate ai provider vengono eseguiti nel sidecar. L'importazione di uno schema non avvia un server.
Il sidecar pubblica il suo contratto servito su GET /api/openapi.json. Utilizza quel documento in esecuzione per controllare metodi, parametri di percorso, payload e codici di stato per l'applicazione a cui sei connesso. Il server riunisce i suoi gruppi in apps/sidecar/src/layers.ts; viene assemblato il contratto condiviso packages/api/src/index.ts.
Famiglie di risorse
- Progetto: progetti, disegni, componenti, versioni di disegni, importazione/esportazione di entità e analisi CAD esatta, esportazione STEP e analisi di assiemi.
- Produzione: percorsi utensile e versioni, commenti, suggerimenti sul generatore, analisi, verifica della riproduzione, lavori di produzione nativi, materiali, strumenti, configurazioni della macchina, elementi di libreria e costi di produzione.
- Assistente: provider, credenziali, modelli, sessioni, turni di streaming, controlli di sessione, azioni, memoria di progetto, contesto dell'area di lavoro e consigli stateless.
- Collaborazione: rami, commit, differenze, richieste pull, revisioni, mirror GitHub, file ed esecuzioni del flusso di lavoro, eventi live e abbinamento di compagni.
- Servizi applicativi: utenti, autenticazione, organizzazioni, notifiche, file, plug-in, fatturazione, analisi, lista d'attesa, configurazione MCP e archiviazione di valori-chiave locali.
I gruppi di contratto mantengono le forme di risposta specifiche dell'endpoint. Un client dovrebbe decodificare lo schema dell'operazione che chiama invece di presupporre una singola busta JSON a livello di applicazione.
Risposte e fallimenti
Gli errori contrassegnati più comuni vengono mappati su HTTP 400 (BadRequest), 401 (Unauthorized), 403 (Forbidden), 404 (NotFound), 405 (MethodNotAllowed), 409 (Conflict) e 500 (InternalError). I loro schemi dichiarati hanno un carattere leggibile dall'uomo message. Alcuni gruppi utilizzano una busta con success: false, message, e errors; un piccolo numero usa an error campo.
Le risposte con esito positivo possono essere un record, una matrice, un valore nullable o una busta. Envelope include success, message, e data; EnvelopeOpt rende il messaggio facoltativo. Gli endpoint di creazione dichiarano esplicitamente 201 dove appropriato. Non dedurre il successo esclusivamente da un campo JSON senza controllare lo stato HTTP e lo schema dell'endpoint.
La decodifica dello schema convalida l'input del trasporto prima dell'esecuzione del gestore. La convalida aziendale viene ancora eseguita nel servizio: una richiesta strutturalmente valida può fare riferimento a un disegno inaccessibile, contenere un artefatto di produzione obsoleto o richiedere un'operazione di ramo in conflitto.
Utilizzare il client condiviso
ApiClient.layer ci vuole un baseUrl e applicazione token. Fornisce il trasporto di recupero e il middleware di autorizzazione del client. I suoi metodi derivano direttamente da Api, quindi questo client copre anche le operazioni omesse dalla generazione del codice.
import { ApiClient } from "@cadcamfun/api"
import { Effect } from "effect"
const projects = Effect.gen(function* () {
const api = yield* ApiClient
return yield* api.projects.list()
}).pipe(Effect.provide(ApiClient.layer({ baseUrl, token }))) L'URL di base è l'indirizzo di loopback del sidecar e la porta assegnata. Risolvilo dalla connessione desktop, anziché mantenere una porta tra i lanci. Tieni i token fuori da URL e log.
Richieste di progettazione e produzione
Utilizzo delle operazioni di progetto /api/projects; i disegni e i percorsi utensile hanno le proprie raccolte e percorsi dettagliati. POST /api/toolpaths/generate produce codice G, dati di programma analizzati, avvisi e statistiche dalle impostazioni e dalla geometria del generatore. /suggest, /parse, e /verify esporre consigli sui parametri, interpretazione del codice G e riproduzione delle scorte. Questi calcoli non creano un percorso utensile salvato.
POST /api/toolpaths/manufacture accetta un'istantanea CAD con versione e restituisce un risultato del kernel con NC, assegnazioni di strumenti, dati di taglio, reclami, problemi e un livello di rilascio. Salvare un documento risultante separatamente tramite un'operazione di creazione o aggiornamento del percorso utensile. Vedere Configurazioni per la convalida delle prove durante la persistenza.
POST /api/cad/exact/analyze, /step, e /assembly accettare elementi espliciti o un identificatore di disegno memorizzato. La lettura di un disegno memorizzato applica i normali controlli di accesso al disegno del chiamante.
Streaming e recupero
Il flusso AI trasporta eventi digitati per testo, ragionamento, chiamate e risultati di strumenti, richieste di autorizzazione e domande, tentativi, stato di turno, contesto e completamento. I client devono consumare gli eventi in modo incrementale e conservare l'identificatore di sessione. La fine di una connessione HTTP non è una prova sufficiente che un turno del modello sia terminato: lo stato della sessione può essere letto nuovamente dopo la riconnessione.
Gli schemi di eventi dell'intelligenza artificiale risiedono packages/api/src/ai-events.ts e packages/ai/src/events.ts. Gli eventi live generali utilizzano il gruppo eventi. I download binari, le risposte bootstrap del plug-in JavaScript e i corpi webhook non elaborati firmati richiedono la propria gestione del trasporto.
Elenca i percorsi utilizzati dalle pagine dei risultati page e limit parametri di interrogazione. Per le configurazioni della macchina, page il valore predefinito è 1, limit il valore predefinito è 20 ed è limitato a 1–100 e la risposta trasporta pagination con page, limit, total, e totalPages (apps/sidecar/src/http/machine-configs.ts). Controlla la pagina di riferimento di ciascun gruppo per i parametri che dichiara effettivamente.
SDK generati
@cadcamfun/httpapi-codegen riflette i gruppi HttpApi nei metadati dell'operazione e nei client generati. Il generatore API scrive un SDK Promise packages/api/src/sdk/generated ed effettuare clienti a packages/api/src/client/generated. L'SDK Promise pubblico viene esportato come @cadcamfun/api/sdk.
bun run --filter @cadcamfun/api generate
bun run --filter @cadcamfun/api generate:check Entrambi i target generati omettono il caricamento in più parti del profilo, l'installazione in più parti del plug-in, la creazione di MCP con più schemi di successo, l'aggiornamento di MCP con identificatori in collisione, la creazione del percorso utensile del progetto con nomi di input duplicati e la fornitura di file di plug-in con intestazioni di flusso. Il target Promise omette inoltre i webhook grezzi di Stripe, il bootstrap JavaScript del plug-in, il download di file binari e le richieste di generazione/suggerimento del generatore. Queste omissioni sono esplicite in packages/api/scripts/generate-clients.ts; utilizzare il cliente contrattuale o il trasporto grezzo appropriato per tali operazioni.
Organizzazione delle fonti
groups/ contiene contratti di risorse. Da qui provengono la geometria condivisa e gli schemi CAM @cadcamfun/core; cad-exact.ts, cam-kernel.ts, e cam-program.ts descrivere ricchi risultati CAD/CAM e documenti portatili. client.ts costruisce il client del contratto, mentre lo script di generazione possiede gli obiettivi generati e gli elenchi di omissione.
Regole di integrazione
Riutilizza gli schemi di contratto ai confini del trasporto e mantieni le dipendenze del database nel sidecar. Introduci un endpoint attraverso il suo contratto, gestore, servizio o repository e una copertura HTTP mirata insieme. I file generati sono output: modifica il loro contratto o generatore e rigenerali. Una versione dello schema API, una versione del file portatile e una versione dell'API del plug-in descrivono contratti separati.
Riferimento alle risorse
325 operazioni attraverso 232 percorsi e 35 gruppi di risorse, con 56 schemi denominati. Ogni pagina di risorsa elenca le relative operazioni e mostra i parametri di percorso/query/intestazione dichiarati, campi obbligatori e facoltativi, valori nullable, tipi di contenuto, stati di successo ed errore e schemi completi.
I dati vengono emessi da packages/api/src/index.ts, lo stesso contratto HttpApi composto utilizzato dai clienti e dal sidecar. Le pagine descrivono il contratto check-out; ispezionare i server in esecuzione /api/openapi.json se ti connetti a un'altra versione.
Risorsa HTTP
Salute
Sonda sull'integrità del processo pubblico con stato e timestamp.
Risorsa HTTP
Sistema
Disponibilità autenticata e versione dell'applicazione utilizzata dai client nativi.
Risorsa HTTP
Progetti
Crea, elenca, leggi, aggiorna e rimuovi progetti con controlli di accesso del proprietario e dell'organizzazione.
Risorsa HTTP
Spazio di lavoro
Disegni di progetto, componenti, percorsi utensile, risorse di libreria e anteprime limitate di sola lettura per i client associati.
Risorsa HTTP
Disegni
Disegni di progetto e geometria salvata, metadati e operazioni di aggiornamento.
Risorsa HTTP
Componenti
Componenti di progetto riutilizzabili e relativi dati di progettazione persistenti.
Risorsa HTTP
CAD esatto
Analizza la geometria esatta, esporta STEP e controlla le relazioni degli assiemi da istantanee di scene o disegni salvati.
Risorsa HTTP
Percorsi utensile
Programmi di lavorazione salvati, associazioni di disegni e documenti di produzione portatili convalidati.
Risorsa HTTP
Percorsi utensile del progetto
Elenco e creazione di percorsi utensile nell'ambito del progetto con inviluppi di risposta specifici dell'endpoint.
Risorsa HTTP
Lavorazione
Produzione nativa, generazione di codici G basata sulle impostazioni, suggerimenti, analisi e verifica della riproduzione.
Risorsa HTTP
Cronologia del percorso utensile
Versioni del percorso utensile, ripristino, rilevamento delle librerie e commenti sui programmi in thread.
Risorsa HTTP
Materiali
Record dei materiali, proprietà di lavorazione dell'applicazione e accesso alle risorse.
Risorsa HTTP
Stoccaggio materiale
Allegati per l'archiviazione dei materiali e importazione/esportazione JSON per lo scambio di librerie.
Risorsa HTTP
Utensili
Registrazioni e dimensioni della taglierina utilizzate dai flussi di lavoro di lavorazione dell'applicazione.
Risorsa HTTP
Deposito attrezzi
Dati di archiviazione e raccolta degli utensili o importazione/esportazione per utensile.
Risorsa HTTP
Macchine
Record di configurazione della macchina, aggiornamenti, rimozione e clonazione.
Risorsa HTTP
Deposito macchina
Allegati archiviazione macchina e import/export configurazioni.
Risorsa HTTP
Biblioteca
Record di librerie condivise e raccolte di ricerca di componenti, materiali e strumenti.
Risorsa HTTP
Costi di produzione
Stime, richieste di calcolo, costi dei materiali, costi operativi e registrazioni dell'usura degli utensili.
Risorsa HTTP
Sessioni e azioni AI
Provider, credenziali, conversazioni, turni di streaming, invocazione di azioni, token bridge, competenze e ripristino della sessione.
Risorsa HTTP
Storia e flussi di lavoro
Commit, ramificazioni, ripristini, revisioni, mirroring GitHub e invio del flusso di lavoro compatibili con Project Git.
Risorsa HTTP
Eventi del progetto
Eventi inviati dal server nell'ambito del progetto per client live.
Risorsa HTTP
Abbinamento dei compagni
Stato del gateway desktop, attivazione/disattivazione, associazione e revoca del dispositivo.
Risorsa HTTP
Plugin
Registro dei plugin, installazione dei pacchetti, configurazione, abilitazione/disabilitazione e risorse dei plugin serviti.
Risorsa HTTP
Configurazione dell'MCP
CRUD di configurazione della connessione MCP e richieste di informazioni sul server.
Risorsa HTTP
File
Operazioni di caricamento e download con payload specifico dell'endpoint e codifica della risposta.
Risorsa HTTP
Archiviazione di valori-chiave
Preferenze compatibili con JSON e voci di contesto con elenco di prefissi e operazioni per chiave.
Risorsa HTTP
Organizzazioni
Elenchi di organizzazioni e record di organizzazioni gestite.
Risorsa HTTP
Notifiche
Elenco delle notifiche, aggiornamenti dello stato di lettura, eliminazione e contrassegna tutti i letti.
Risorsa HTTP
Autenticazione
Accesso all'account, registrazione, ripristino, verifica, collegamenti magici, ricerca di sessioni e registrazione della passkey.
Risorsa HTTP
Utenti
Profili, risorse dell'account, chiavi API, record di token, password e rimozione dell'account.
Risorsa HTTP
Fatturazione
Informazioni sull'abbonamento, integrazione del portale/checkout Stripe, manutenzione di prova e acquisizione di webhook firmati.
Risorsa HTTP
Analitica
Metriche dell'applicazione, attività recente, query sull'utilizzo e richieste di monitoraggio.
Risorsa HTTP
Servizi applicativi
Percorsi di integrazione desktop, operazioni di progetto monitorate, notifiche e record di sottoscrizione push.
Risorsa HTTP
Lista d'attesa
Invia la registrazione alla lista d'attesa tramite l'API dell'applicazione locale.
Scarica OpenAPI JSON · Segui le richieste con le risposte acquisite
Convenzioni di connessione e richiesta
L'API viene fornita dal sidecar locale anziché da un endpoint ospitato fisso. Tauri ottiene l'URL di loopback selezionato dinamicamente e il token di avvio. Un sidecar avviato manualmente annuncia il suo port in un evento pronto per JSON. Un client mobile accoppiato si connette invece tramite il gateway HTTPS configurato.
curl --silent --show-error "$CADCAMFUN_URL/api/projects" \
--header "Authorization: Bearer $CADCAMFUN_TOKEN" Imposta entrambe le variabili dalla connessione effettiva. I modelli di richiesta nelle pagine delle risorse utilizzano deliberatamente segnaposto e file di payload. I campi di trasporto facoltativi non sono promesse che ogni operazione aziendale può omettere: la creazione del progetto, ad esempio, rifiuta un nome mancante nel suo gestore.
| Convenzione | Comportamento del cliente |
|---|---|
| Parametri del percorso | Sostituisci il segmento denominato e codifica nell'URL il suo valore. Tratta un identificatore come un singolo segmento. |
| Parametri di query | Codificare i valori dichiarati. L'impaginazione e il filtraggio sono per endpoint; non esiste un contratto universale sulle dimensioni della pagina. |
| Carico utile JSON | Invia l'oggetto dichiarato con Content-Type: application/json. La presenza richiesta e l'accettazione del null sono indipendenti. |
| Carico utile multiparte | Crea parti del modulo con il client di caricamento o FormData; lascia che sia il trasporto a scegliere il suo confine. |
| Risposta binaria, JavaScript o flusso | Utilizzare il tipo di supporto dichiarato. Non chiamare response.json() incondizionatamente. |
| Errori | Controlla lo stato HTTP e decodifica la forma di errore dichiarata dell'endpoint. Gli inviluppi di errore differiscono tra le famiglie di risorse. |
| Riprovata scrive | Leggi lo stato dopo un'operazione interrotta prima di inviare nuovamente una mutazione. Il contratto non prevede un meccanismo universale di chiave di idepotenza. |
Manutenzione dei riferimenti generati
packages/web/script/generate-api-reference.mjs legge il contratto composto utilizzando l'implementazione Effect installata nel pacchetto API e scrive il JSON di riferimento. Il Documentation Worker consuma il contenuto generato; non inizializza il server delle applicazioni per rispondere alle richieste di documentazione.
bun run generate:api-reference
bun run check:api-reference
bun run check:docs-index La copertura delle risorse viene verificata rispetto a ogni operazione dichiarata. Un gruppo appena aggiunto deve ricevere metadati e navigazione rivolti al lettore e una richiesta o risposta modificata deve essere rigenerata. Le guide scritte a mano spiegano ancora le regole di autorizzazione, gli effetti collaterali, la configurazione del servizio e i limiti che uno schema HTTP da solo non può esprimere.
Ricette di integrazione
Inizia con richieste HTTP catturate per vedere come rispondono effettivamente la creazione del progetto, la convalida aziendale, il rifiuto della portante, i record correlati e la persistenza del valore-chiave. Utilizzo integrazione client digitato per riprodurre tali operazioni con il client Promise SDK o Effect e gestire i relativi canali di errore distinti.
| Integrazione | Procedura | Stato chiave da mantenere |
|---|---|---|
| Redattore del progetto | Crea, salva e riapri il lavoro | Identità del progetto/risorsa, dati salvati, semantica di aggiornamento effettiva. |
| Pipeline di produzione | Generare e mantenere un lavoro nativo | Richiesta catturata, NC/programma esatto, richieste di rilascio, documento portatile corrispondente. |
| Interfaccia utente dell'assistente | Consumare eventi e recuperare sessioni | Identità progetto/sessione, autorizzazioni/domande in sospeso, stato di turno del terminale. |
| Capacità esterna | Crea un plugin supportato | Manifesto, esportazioni di moduli, concessione di capacità, convalida degli argomenti e risultato dello strumento. |
| Esaminare l'automazione | Versione e revisione del lavoro del progetto | Commit/ref, differenze strutturali, revisioni, flusso di lavoro impegnato, output di controlli individuali. |
| Cliente accoppiato | Abilita e gestisci l'accesso al dispositivo | Indirizzo gateway, impronta digitale del certificato, token del dispositivo revocabile individualmente. |
Queste ricette collegano i contratti HTTP al comportamento del servizio reale. Uno schema può descrivere la presenza richiesta, la codifica e una forma restituita; la sua guida collegata spiega le regole di accesso, gli effetti di persistenza, il ripristino supportato e i limiti che non possono essere dedotti solo da questi tipi.
Operazioni per gruppo di risorse
Il contratto attualmente dichiara 270 operazioni in 34 gruppi, tutti sotto un unico bearer Schema di sicurezza HTTP. L’unica operazione senza sicurezza del portatore è l’indagine sulla salute pubblica. La tabella viene calcolata dal documento OpenAPI generato: operazioni per gruppo, metodi HTTP utilizzati, quanti percorsi distinti e un percorso rappresentativo.
| Gruppo | Etichetta | Op | Metodi | Percorsi | Percorso di esempio |
|---|---|---|---|---|---|
| Salute | health | 1 | OTTIENI 1 | 1 | /api/health |
| Sistema | system | 2 | OTTIENI 2 | 2 | /health |
| Progetti | projects | 5 | ELIMINA 1, OTTIENI 2, POST 1, PUT 1 | 2 | /api/projects |
| Disegni | drawings | 5 | ELIMINA 1, OTTIENI 2, POST 1, PUT 1 | 2 | /api/drawings/{id} |
| Componenti | components | 5 | ELIMINA 1, OTTIENI 2, POST 1, PUT 1 | 2 | /api/components/{id} |
| CAD esatto | cadExact | 3 | PUBBLICARE 3 | 3 | /api/cad/exact/analyze |
| Percorsi utensile | toolpaths | 7 | ELIMINA 1, OTTIENI 3, POST 2, PUT 1 | 3 | /api/drawings/{id}/toolpaths |
| Percorsi utensile del progetto | projectToolpaths | 2 | OTTIENI 1, PUBBLICA 1 | 1 | /api/projects/{id}/toolpaths |
| Lavorazione | toolpathGenerator | 5 | PUBBLICARE 5 | 5 | /api/toolpaths/generate |
| Cronologia del percorso utensile | toolpathExtras | 8 | ELIMINA 1, OTTIENI 3, POST 3, PUT 1 | 5 | /api/toolpaths/library |
| Materiali | materials | 5 | ELIMINA 1, OTTIENI 2, POST 1, PUT 1 | 2 | /api/materials |
| Stoccaggio materiale | materialsStorage | 5 | ELIMINA 1, OTTIENI 2, PUBBLICA 2 | 2 | /api/materials/export-import |
| Utensili | tools | 5 | ELIMINA 1, OTTIENI 2, POST 1, PUT 1 | 2 | /api/tools |
| Deposito attrezzi | toolsStorage | 7 | ELIMINA 1, OTTIENI 3, PUBBLICA 3 | 3 | /api/tools/export-import |
| Macchine | machineConfigs | 6 | ELIMINA 1, OTTIENI 2, POST 2, PUT 1 | 3 | /api/machine-configs |
| Deposito macchina | machineConfigsStorage | 5 | ELIMINA 1, OTTIENI 2, PUBBLICA 2 | 2 | /api/machine-configs/export-import |
| Biblioteca | library | 8 | ELIMINA 1, OTTIENI 5, POST 1, PUT 1 | 5 | /api/library |
| Costi di produzione | production-costs | 21 | ELIMINA 4, OTTIENI 8, POST 5, PUT 4 | 9 | /api/production-costs/estimates |
| Sessioni e azioni AI | ai | 34 | ELIMINA 3, OTTIENI 8, POST 21, PUT 2 | 32 | /api/ai/actions |
| Storia e flussi di lavoro | vcs | 22 | OTTIENI 10, POST 11, PUT 1 | 19 | /api/projects/{id}/actions/dispatch |
| Eventi del progetto | events | 1 | OTTIENI 1 | 1 | /api/projects/{id}/events |
| Abbinamento dei compagni | companion | 5 | ELIMINA 1, OTTIENI 1, PUBBLICA 3 | 5 | /api/companion |
| Plugin | plugins | 16 | ELIMINA 1, OTTIENI 8, PATCH 1, POST 4, PUT 2 | 12 | /api/plugins |
| Configurazione dell'MCP | mcp | 8 | ELIMINA 2, OTTIENI 2, POST 2, PUT 2 | 3 | /api/mcp/config |
| File | files | 2 | OTTIENI 1, PUBBLICA 1 | 2 | /api/download |
| Archiviazione di valori-chiave | kv | 4 | ELIMINA 1, OTTIENI 2, metti 1 | 2 | /api/kv |
| Organizzazioni | organizations | 5 | ELIMINA 1, OTTIENI 2, POST 1, PUT 1 | 2 | /api/organizations |
| Notifiche | notifications | 4 | ELIMINA 1, OTTIENI 1, POST 1, PUT 1 | 3 | /api/notifications |
| Autenticazione | auth | 12 | OTTIENI 1, PUBBLICA 11 | 12 | /api/auth/forgot-password |
| Utenti | user | 16 | ELIMINA 2, OTTIENI 10, POST 2, PUT 2 | 12 | /api/user/api-keys |
| Fatturazione | billing | 15 | ELIMINA 1, OTTIENI 5, POST 8, PUT 1 | 10 | /api/better-auth-stripe/billing-portal |
| Analitica | analytics | 10 | ELIMINA 1, OTTIENI 7, PUBBLICA 2 | 9 | /api/analytics |
| Servizi applicativi | misc | 10 | ELIMINA 2, OTTIENI 3, POST 4, PUT 1 | 6 | /api/app-control/notify |
| Lista d'attesa | waitlist | 1 | PUBBLICARE 1 | 1 | /api/waitlist |
Codici di stato nel contratto
Contare ciascuna risposta dichiarata una volta per operazione fornisce questa immagine di ciò che un client deve essere pronto a decodificare:
| Stato | Dichiarato il | Corpo tipico |
|---|---|---|
| 200 | 242 operazioni | Risorsa, array, valore nullable o Envelope |
| 201 | 28 operazioni | Il record creato (ad es POST /api/projects) |
| 204 | 1 operazione | Nessuno |
| 400 | 206 operazioni | BadRequest, EnvBadRequest e varianti specifiche della famiglia |
| 401 | 269 operazioni | Unauthorized (middleware portante) |
| 403 | 101 operazioni | Forbidden / EnvForbidden |
| 404 | 149 operazioni | NotFound / EnvNotFound |
| 405 | 30 operazioni | EnvMethodNotAllowed / KeyedMethodNotAllowed |
| 409 | 29 operazioni | Conflict / EnvConflict |
| 500 | 264 operazioni | InternalError, EnvInternal, KeyedInternal e varianti familiari |
| 501, 503 | 1 operazione ciascuno | Specifico per l'endpoint |
Ogni errore è un errore con tag Effect, quindi il suo corpo JSON contiene sempre un file _tag discriminatore accanto ai suoi campi. Esistono tre famiglie di corpi, ereditate dai gestori legacy in modo che i client esistenti continuino a funzionare:
{ "_tag": "NotFound", "message": "Project not found" } { "_tag": "EnvNotFound", "success": false, "message": "Material not found", "errors": null } { "_tag": "KeyedInternal", "error": "Failed to load components" } Le buste di successo rispecchiano la busta di errore: { success: true, message, data }, dove data forse null. IL EnvelopeOpt la variante omette message quando il conduttore non ne ha fornito uno. Accendi _tag piuttosto che sulla presenza di message o error.
Come viene elaborata una richiesta
- Il router corrisponde al metodo e al percorso. I percorsi sconosciuti non raggiungono mai un handler.
- Il middleware al portatore confronta il token in tempo costante. Un token mancante o errato interrompe la richiesta con 401 prima di qualsiasi decodifica.
- Percorso, query, intestazioni e corpo vengono decodificati rispetto agli schemi dell'operazione. I problemi strutturali diventano 400 senza eseguire il codice aziendale.
- Il gestore risolve l'account attivo, controlla la proprietà o l'appartenenza all'organizzazione (403/404) ed esegue il servizio.
- Il risultato è codificato con lo schema di successo dichiarato o l'errore con lo schema e lo stato di errore contrassegnati.
Risposte che non sono JSON
| Operazione | Tipo di supporto | Come consumare |
|---|---|---|
POST /api/ai/chat/stream | text/event-stream | Leggi in modo incrementale; ogni data: la linea è un evento dell'assistente digitato. |
GET /api/projects/{id}/events | text/event-stream | Eventi di progetto dal vivo; riconnettersi e rileggere lo stato dopo una caduta. |
GET /api/plugins/bootstrap.js | application/javascript | Caricato dall'host del plugin, non analizzato come JSON. |
GET /api/plugins/serve | application/octet-stream | Byte del file plugin. |
GET /api/download | application/zip | Salva come file; utilizzo response.blob() o eseguire lo streaming su disco. |
L'SDK Promise generato rifiuta una risposta di streaming il cui tipo di contenuto non lo è text/event-stream con ClientError("UnsupportedContentType")e un singolo evento SSE più grande di 16 MiB con SseEventTooLarge.
Chiamata all'API senza client
type TaggedError = { _tag: string; message?: string; error?: string }
async function call<T>(base: string, token: string, method: string, path: string, body?: unknown): Promise<T> {
const response = await fetch(new URL(path, base), {
method,
headers: {
authorization: `Bearer ${token}`,
...(body === undefined ? {} : { "content-type": "application/json" }),
},
body: body === undefined ? undefined : JSON.stringify(body),
})
if (response.status === 204) return undefined as T
const payload = await response.json()
if (!response.ok) {
const failure = payload as TaggedError
throw new Error(`${response.status} ${failure._tag}: ${failure.message ?? failure.error}`)
}
return payload as T
}
const project = await call<{ id: string; name: string }>(
process.env.CADCAMFUN_URL!, process.env.CADCAMFUN_TOKEN!,
"POST", "/api/projects", { name: "Bracket" },
) Preferiscono i client generati in TypeScript: conoscono lo stato di successo di ogni operazione e gli stati di errore dichiarati e trattano qualsiasi altra cosa come UnexpectedStatus invece di indovinare.