Zum Inhalt springen
CADCAMFUN
Doku

Dokumentation

API-Referenz

Die vollständige HTTP-Ressourcenreferenz, authentifizierter lokaler Zugriff, Streaming-Verträge und Clients, die aus gemeinsam genutzten Schemata generiert wurden.

Automatisch aus dem Englischen übersetzt. Englisches Original ansehen

Überblick

Der Sidecar ist ein einzelner Effekt HttpApi. Jeder Endpunkt ist ein typisierter HttpApiEndpoint mit schemageprüften Anforderungs- und Antworttexten, daher stammen diese Referenz, das generierte SDK und der laufende Server aus derselben Deklaration in packages/api.

Oberfläche
325 Vorgänge

Über 232 Pfade und 35 Ressourcengruppen hinweg.

Typen
56 Schemata

Anforderungs-, Antwort- und Fehlerformen, jeweils verknüpft mit den Vorgängen, die sie verwenden.

Vertrag
OpenAPI 3.1.0

Ausgestrahlt vom Sidecar um /api/openapi.json; der Schnappschuss in packages/web wird geprüft von bun run check:api-reference.

Kunden
Eine Oberfläche

Die Desktop-Webansicht, der mobile Begleiter, die AI-Bridge und Skripte rufen alle dieselben Routen auf.

Basis-URL

Es gibt keine gehostete CADCAMFUN-API. Der Sidecar läuft auf Ihrer Maschine, bindet 127.0.0.1 auf einem Port, den das Betriebssystem auswählt (es lauscht auf Port 0), überprüft seinen eigenen /api/healthund gibt erst dann eine JSON-Zeile auf stdout aus. Die Basis-URL lautet http://127.0.0.1:<port> aus dieser Zeile.

Starten Sie einen Einweg-Sidecar und lesen Sie seinen Port ab
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

Der Port ändert sich bei jedem Start

Lesen Sie es aus dem ready zeile (die Desktop-Shell macht genau das), anstatt eine feste Zahl anzunehmen. Protokolle werden an stderr gesendet, sodass stdout nur das Bereitschafts- oder Fehlerereignis überträgt.

Authentifizierung

Der Vertrag legt ein Sicherheitssystem fest, bearer (HTTP Bearer). 324 von 325 Vorgängen erfordern dies; nur GET /api/health ist öffentlich.

AusweisGesendet alsVerwendet von
Token startenAuthorization: Bearer <token>Die Desktop-Webansicht und lokale Skripte; der Wert von CADCAMFUN_TOKEN.
Begleiter-TokenAuthorization: Bearer <token>Ein gekoppeltes Telefon; engerer Zugang, siehe begleiterpaarung.
Kontositzungx-session-tokenWählt das amtierende Konto über dem Inhabertoken aus; sehen identität unten.
Öffentlich und geschützt
curl -s "$CADCAMFUN_URL/api/health"
curl -s "$CADCAMFUN_URL/api/projects" -H "Authorization: Bearer $CADCAMFUN_TOKEN"

Konventionen

  • JSON rein, JSON raus. Körper sind application/json sofern auf der Karte nichts anderes angegeben ist: zwei mehrteilige Uploads, ein Oktett-Stream-Webhook, ein JavaScript-Bootstrap, ein Zip-Download, eine binäre Plugin-Datei und zwei Ereignis-Streams.
  • Vorgangs-IDs sind gepunktet. projects.get, vcs.commit: das Gruppen-Tag, ein Punkt, der von den generierten Clients verwendete Methodenname.
  • Fehler werden getippt. Fehler werden pro Endpunkt deklariert und tragen ein _tag; schalten Sie es ein, anstatt Nachrichten zu analysieren. Im gesamten Vertrag wird 401 für 269-Vorgänge, 500 für 264 und 400 für 206 deklariert.
  • Betriebsanker sind stabil. Jede Karte ist verlinkbar als #op-<method>-<path>, zum Beispiel /docs/api/projects#op-get-api-projects-id.

Streaming

WegFormTrägt
GET /api/projects/{id}/eventsSSEEreignisse für ein Projekt ändern.
POST /api/ai/chat/streamSSEAssistentenausgabe bei der Erstellung, plus Heartbeats; sehen KI-Streaming.
Verfolgen Sie die Ereignisse eines Projekts
curl -N "$CADCAMFUN_URL/api/projects/$PROJECT_ID/events" \
  -H "Authorization: Bearer $CADCAMFUN_TOKEN"

Kunden

@cadcamfun/api/sdk wird aus demselben Vertrag generiert: Jede unten aufgeführte Operations-ID ist eine typisierte Methode CadCam.make(...), wobei eine flache Eingabe von Pfadparametern und Körperfeldern erfolgt. 259 der 325 Vorgänge werden generiert; Jede Karte zeigt ihren genauen Aufruf.

@cadcamfun/api/sdk
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" })

Ressourcen

325 Vorgänge in 35 Gruppen, sortiert nach dem, was sie bedienen.

Kern

Design

Herstellung

Ressourcen

Erweiterungen

Konten

OpenAPI-Dokument

Herunterladen /docs/api/openapi.json (der eingecheckte Snapshot wird von dieser Site gerendert) oder das Live-Dokument von einem laufenden Sidecar unter abrufen /api/openapi.json. Erstellen Sie den Snapshot neu mit bun run generate:api-reference in packages/web nach dem Ändern eines Endpunkts.

Vertrag und Server

@cadcamfun/api definiert Anforderungs- und Antwortschemata mit Effect HttpApi. Es exportiert die Wurzel Api, domänendatensätze, markierte Fehler und Clients. Anforderungshandler, Autorisierungsentscheidungen, Datenbankabfragen und Anbieteraufrufe werden im Sidecar ausgeführt. Durch das Importieren eines Schemas wird kein Server gestartet.

Der Sidecar veröffentlicht seinen bedienten Vertrag unter GET /api/openapi.json. Verwenden Sie dieses laufende Dokument, um Methoden, Pfadparameter, Nutzlasten und Statuscodes für die Anwendung zu überprüfen, mit der Sie verbunden sind. Der Server stellt seine Gruppen zusammen apps/sidecar/src/layers.ts; der gemeinsame Vertrag wird in zusammengestellt packages/api/src/index.ts.

Authentifizierung und Identität

Geschützte Routen erfordern Authorization: Bearer <token>. Der Desktop erhält beim Start seines Sidecars ein neues Anwendungstoken. GET /api/health ist die Untersuchung der öffentlichen Gesundheit; einheimisch /health und /version sind geschützt. Anwendungsinhabertoken werden mit einem zeitsicheren Vergleich verglichen.

Eine optionale x-session-token trägt ein Kontositzungs-JWT. Der Inhabertoken lässt die lokale Anwendung zu; Die Sitzung wählt ihr handelndes Konto aus. Eine fehlende, abgelaufene, ungültige oder verwaiste Sitzung greift auf das lokale Profil der Installation zurück. Ressourcenhandler überprüfen dann den Besitz oder Organisationszugriff über Repository-Autorisierungshelfer.

Ein Bridge-Token mit Gültigkeitsbereich lässt nur zu GET /api/ai/actions und POST /api/ai/actions/invoke. Es gewährt keinen Zugriff auf Projekt-CRUD, Anmeldeinformationseinstellungen oder andere HTTP-Routen. Sein Projekt und Lese-/Schreibumfang werden von der Aktionsbrücke erneut überprüft.

Ressourcenfamilien

  • Design: projekte, Zeichnungen, Komponenten, Zeichnungsversionen, Objektimport/-export sowie exakte CAD-Analyse, STEP-Export und Baugruppenanalyse.
  • Herstellung: werkzeugwege und -versionen, Kommentare, Generatorvorschläge, Analyse, Wiedergabeüberprüfung, native Fertigungsaufträge, Materialien, Werkzeuge, Maschinenkonfigurationen, Bibliothekselemente und Produktionskosten.
  • Assistent: anbieter, Anmeldeinformationen, Modelle, Sitzungen, Streaming-Runden, Sitzungssteuerungen, Aktionen, Projektspeicher, Arbeitsbereichskontext und zustandslose Ratschläge.
  • Zusammenarbeit: branches, Commits, Diffs, Pull Requests, Reviews, GitHub Mirrors, Workflow-Dateien und -Läufe, Live-Events und Companion Pairing.
  • Anwendungsdienstleistungen: benutzer, Authentifizierung, Organisationen, Benachrichtigungen, Dateien, Plugins, Abrechnung, Analysen, Warteliste, MCP-Konfiguration und lokaler Schlüsselwertspeicher.

Die Vertragsgruppen behalten ihre endpunktspezifischen Antwortformen. Ein Client sollte das Schema der von ihm aufgerufenen Operation dekodieren, anstatt von einem einzigen anwendungsweiten JSON-Umschlag auszugehen.

Reaktionen und Misserfolge

Häufige getaggte Fehler werden HTTP 400 zugeordnet (BadRequest), 401 (Unauthorized), 403 (Forbidden), 404 (NotFound), 405 (MethodNotAllowed), 409 (Conflict) und 500 (InternalError). Ihre deklarierten Schemata sind für Menschen lesbar message. Einige Gruppen verwenden einen Umschlag mit success: false, message, und errors; eine kleine Anzahl verwendet ein error feld.

Erfolgsantworten können ein Datensatz, ein Array, ein Nullwert zulassender Wert oder ein Umschlag sein. Envelope beinhaltet success, message, und data; EnvelopeOpt macht die Nachricht optional. Erstellungsendpunkte deklarieren gegebenenfalls explizit 201. Schließen Sie den Erfolg nicht allein aus einem JSON-Feld ab, ohne den HTTP-Status und das Endpunktschema zu überprüfen.

Durch die Schemadekodierung werden Transporteingaben validiert, bevor der Handler ausgeführt wird. Die Geschäftsvalidierung wird weiterhin im Dienst ausgeführt: Eine strukturell gültige Anfrage kann sich auf eine nicht zugängliche Zeichnung beziehen, ein veraltetes Fertigungsartefakt enthalten oder einen widersprüchlichen Zweigvorgang anfordern.

Verwenden Sie den gemeinsam genutzten Client

ApiClient.layer dauert ein baseUrl und Anwendung token. Es stellt den Abruftransport und die Client-Autorisierungs-Middleware bereit. Seine Methoden leiten sich direkt von ab Apidaher deckt dieser Client auch Vorgänge ab, die bei der Codegenerierung ausgelassen wurden.

Lesen Sie Projekte mit dem Effect-Client
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 })))

Die Basis-URL ist die Loopback-Adresse und der zugewiesene Port des Sidecars. Lösen Sie das Problem über die Desktop-Verbindung, anstatt einen Port über mehrere Starts hinweg beizubehalten. Halten Sie Token aus URLs und Protokollen fern.

Design- und Fertigungsanfragen

Einsatz im Projektbetrieb /api/projects; zeichnungen und Werkzeugwege verfügen über eigene Sammlungen und Detailrouten. POST /api/toolpaths/generate erstellt G-Code, analysierte Programmdaten, Warnungen und Statistiken aus Generatoreinstellungen und Geometrie. /suggest, /parse, und /verify stellen Sie Parameterhinweise, G-Code-Interpretation und Bestandswiedergabe bereit. Diese Berechnungen erstellen keinen gespeicherten Werkzeugweg.

POST /api/toolpaths/manufacture akzeptiert einen versionierten CAD-Schnappschuss und gibt ein Kernel-Ergebnis mit NC, Werkzeugzuweisungen, Schnittdaten, Ansprüchen, Problemen und einem Release-Level zurück. Speichern Sie ein resultierendes Dokument separat über einen Werkzeugweg-Erstellungs- oder Aktualisierungsvorgang. Sehen Setups zur Beweisvalidierung während der Persistenz.

POST /api/cad/exact/analyze, /step, und /assembly akzeptieren Sie explizite Elemente oder eine gespeicherte Zeichnungskennung. Beim Lesen einer gespeicherten Zeichnung werden die normalen Zeichnungszugriffsprüfungen des Aufrufers angewendet.

Streaming und Wiederherstellung

Der KI-Stream überträgt typisierte Ereignisse für Text, Begründung, Toolaufrufe und -ergebnisse, Erlaubnis- und Frageanfragen, Wiederholungsversuche, Turn-Status, Kontext und Abschluss. Clients müssen Ereignisse inkrementell konsumieren und die Sitzungskennung beibehalten. Das Beenden einer HTTP-Verbindung ist kein ausreichender Beweis dafür, dass ein Modellwechsel abgeschlossen ist: Der Sitzungsstatus kann nach dem erneuten Herstellen der Verbindung erneut gelesen werden.

KI-Ereignisschemata leben in packages/api/src/ai-events.ts und packages/ai/src/events.ts. Allgemeine Live-Ereignisse verwenden die Ereignisgruppe. Binäre Downloads, JavaScript-Plugin-Bootstrap-Antworten und signierte Roh-Webhook-Körper erfordern eine eigene Transportabwicklung.

Listen Sie die Routen auf, die die Seite ihrer Ergebnisse verwendet page und limit abfrageparameter. Für Maschinenkonfigurationen page der Standardwert ist 1, limit der Standardwert ist 20 und wird auf 1–100 begrenzt, und die Antwort wird übertragen pagination mit page, limit, total, und totalPages (apps/sidecar/src/http/machine-configs.ts). Überprüfen Sie die Referenzseite jeder Gruppe auf die tatsächlich deklarierten Parameter.

Generierte SDKs

@cadcamfun/httpapi-codegen spiegelt HttpApi-Gruppen in Vorgangsmetadaten und generierte Clients wider. Der API-Generator schreibt ein Promise SDK darauf packages/api/src/sdk/generated und Effektkunden an packages/api/src/client/generated. Das öffentliche Promise SDK wird exportiert als @cadcamfun/api/sdk.

Client-Drift neu generieren oder überprüfen
bun run --filter @cadcamfun/api generate
bun run --filter @cadcamfun/api generate:check

Both generated targets omit profile multipart upload, plugin multipart installation, MCP creation with multiple success schemas, MCP update with colliding identifiers, project toolpath creation with duplicate input names, and plugin file serving with stream headers. The Promise target also omits Stripe raw webhooks, plugin JavaScript bootstrap, binary file download, and the generator's generate/suggest requests. Diese Auslassungen sind explizit in packages/api/scripts/generate-clients.ts; verwenden Sie für diese Vorgänge den Vertragskunden oder den entsprechenden Rohtransport.

Quellorganisation

groups/ enthält Ressourcenverträge. Gemeinsam genutzte Geometrie und CAM-Schemata stammen von @cadcamfun/core; cad-exact.ts, cam-kernel.ts, und cam-program.ts beschreiben umfangreiche CAD/CAM-Ergebnisse und tragbare Dokumente. client.ts erstellt den Vertragsmandanten, während das Generierungsskript generierte Ziele und Auslassungslisten besitzt.

Integrationsregeln

Verwenden Sie Vertragsschemata an Transportgrenzen wieder und behalten Sie Datenbankabhängigkeiten im Sidecar bei. Führen Sie einen Endpunkt über seinen Vertrag, seinen Handler, seinen Dienst oder sein Repository ein und konzentrieren Sie sich gemeinsam auf die HTTP-Abdeckung. Generierte Dateien sind Ausgaben: Bearbeiten Sie ihren Vertrag oder Generator und generieren Sie sie neu. Eine API-Schemaversion, eine Portable-File-Version und eine Plugin-API-Version beschreiben separate Verträge.

Ressourcenreferenz

325 Vorgänge über 232 Pfade und 35 Ressourcengruppen, mit 56 benannten Schemas. Jede Ressourcenseite listet ihre Vorgänge auf und zeigt deklarierte Pfad-/Abfrage-/Header-Parameter, erforderliche und optionale Felder, Nullable-Werte, Inhaltstypen, Erfolgs- und Fehlerstatus sowie vollständige Schemata an.

Die Daten werden von ausgegeben packages/api/src/index.ts, derselbe zusammengesetzte HttpApi-Vertrag, der von den Clients und dem Sidecar verwendet wird. Die Seiten beschreiben den ausgecheckten Vertrag; Überprüfen Sie die laufenden Server /api/openapi.json wenn Sie eine Verbindung zu einer anderen Version herstellen.

HTTP-Ressource

Gesundheit

Integritätsprüfung für öffentliche Prozesse mit Status und Zeitstempel.

HTTP-Ressource

System

Authentifizierte Bereitschaft und Anwendungsversion, die von nativen Clients verwendet werden.

HTTP-Ressource

Projekte

Erstellen, listen, lesen, aktualisieren und entfernen Sie Projekte mit Eigentümer- und Organisationszugriffsprüfungen.

HTTP-Ressource

Arbeitsplatz

Schreibgeschützte Projektzeichnungen, Komponenten, Werkzeugwege, Bibliotheksressourcen und begrenzte Vorschauen für Begleitkunden.

HTTP-Ressource

Zeichnungen

Projektzeichnungen und ihre gespeicherten Geometrie-, Metadaten- und Aktualisierungsvorgänge.

HTTP-Ressource

Komponenten

Wiederverwendbare Projektkomponenten und ihre persistenten Entwurfsdaten.

HTTP-Ressource

Exaktes CAD

Analysieren Sie die genaue Geometrie, exportieren Sie STEP und überprüfen Sie Baugruppenbeziehungen anhand von Szenenschnappschüssen oder gespeicherten Zeichnungen.

HTTP-Ressource

Werkzeugwege

Gespeicherte Bearbeitungsprogramme, Zeichnungszuordnungen und validierte tragbare Fertigungsdokumente.

HTTP-Ressource

Werkzeugwege projizieren

Projektbezogene Auflistung und Erstellung von Werkzeugwegen mit endpunktspezifischen Antwortumschlägen.

HTTP-Ressource

Bearbeitung

Native Herstellung, einstellungsgesteuerte G-Code-Generierung, Vorschläge, Parsing und Wiedergabeüberprüfung.

HTTP-Ressource

Werkzeugwegverlauf

Werkzeugwegversionen, Wiederherstellung, Bibliothekserkennung und Thread-Programmkommentare.

HTTP-Ressource

Materialien

Materialdatensätze, Anwendungsbearbeitungseigenschaften und Ressourcenzugriff.

HTTP-Ressource

Materiallagerung

Materialspeicheranhänge und JSON-Import/Export für den Bibliotheksaustausch.

HTTP-Ressource

Werkzeuge

Fräserdatensätze und -abmessungen, die von Anwendungsbearbeitungs-Workflows verwendet werden.

HTTP-Ressource

Werkzeugaufbewahrung

Werkzeugspeicherdaten und -erfassung oder Werkzeugimport/-export.

HTTP-Ressource

Maschinen

Maschinenkonfigurationsdatensätze, Aktualisierungen, Entfernung und Klonen.

HTTP-Ressource

Maschinenlagerung

Maschinenspeicheranhänge und Konfigurationsimport/-export.

HTTP-Ressource

Bibliothek

Gemeinsam genutzte Bibliotheksdatensätze und Komponenten-, Material- und Werkzeugsuchsammlungen.

HTTP-Ressource

Produktionskosten

Kostenvoranschläge, Berechnungsanfragen, Materialkosten, Betriebskosten und Werkzeugverschleißaufzeichnungen.

HTTP-Ressource

KI-Sitzungen und -Aktionen

Anbieter, Anmeldeinformationen, Konversationen, Streaming-Runden, Aktionsaufrufe, Bridge-Tokens, Fähigkeiten und Sitzungswiederherstellung.

HTTP-Ressource

Historie und Arbeitsabläufe

Projekt Git-kompatible Commits, Branches, Wiederherstellungen, Überprüfungen, GitHub-Spiegelung und Workflow-Versand.

HTTP-Ressource

Projektveranstaltungen

Projektbezogene, vom Server gesendete Ereignisse für Live-Clients.

HTTP-Ressource

Begleiterpaarung

Desktop-Gateway-Status, Aktivierung/Deaktivierung, Gerätekopplung und Gerätesperre.

HTTP-Ressource

Plugins

Plugin-Registrierung, Paketinstallation, Konfiguration, Aktivieren/Deaktivieren und bereitgestellte Plugin-Assets.

HTTP-Ressource

MCP-Konfiguration

MCP-Verbindungskonfigurations-CRUD und Server-Info-Anfragen.

HTTP-Ressource

Dateien

Upload- und Download-Vorgänge mit endpunktspezifischer Nutzlast und Antwortkodierung.

HTTP-Ressource

Schlüsselwertspeicher

JSON-kompatible Präferenz- und Kontexteinträge mit Präfixauflistung und Operationen pro Schlüssel.

HTTP-Ressource

Organisationen

Organisationslisten und verwaltete Organisationsdatensätze.

HTTP-Ressource

Benachrichtigungen

Benachrichtigungsliste, Lesestatusaktualisierungen, Löschung und Alle als gelesen markieren.

HTTP-Ressource

Authentifizierung

Kontoanmeldung, Registrierung, Wiederherstellung, Verifizierung, Magic Links, Sitzungssuche und Passkey-Registrierung.

HTTP-Ressource

Benutzer

Profile, Kontoressourcen, API-Schlüssel, Token-Datensätze, Passwörter und Kontoentfernung.

HTTP-Ressource

Abrechnung

Abonnementinformationen, Stripe-Checkout/Portal-Integration, Testwartung und signierte Webhook-Aufnahme.

HTTP-Ressource

Analytik

Anwendungsmetriken, aktuelle Aktivitäten, Nutzungsabfragen und Tracking-Anfragen.

HTTP-Ressource

Anwendungsdienste

Desktop-Integrationsrouten, verfolgte Projektabläufe, Benachrichtigungen und Push-Abonnement-Datensätze.

HTTP-Ressource

Warteliste

Senden Sie die Wartelistenregistrierung über die lokale Anwendungs-API.

Laden Sie OpenAPI JSON herunter · Verfolgen Sie Anfragen mit erfassten Antworten

Verbindungs- und Anforderungskonventionen

Die API wird vom lokalen Sidecar und nicht von einem fest gehosteten Endpunkt bereitgestellt. Tauri erhält seine dynamisch ausgewählte Loopback-URL und sein Starttoken. Ein manuell gestarteter Sidecar gibt seinen Port in einem JSON-Ready-Ereignis bekannt. Ein gekoppelter mobiler Client stellt stattdessen eine Verbindung über sein konfiguriertes HTTPS-Gateway her.

Lesen Sie mit Ihrer aktuellen Sidecar-Verbindung
curl --silent --show-error "$CADCAMFUN_URL/api/projects" \
  --header "Authorization: Bearer $CADCAMFUN_TOKEN"

Legen Sie beide Variablen aus der tatsächlichen Verbindung fest. Anforderungsvorlagen auf Ressourcenseiten verwenden bewusst Platzhalter und Payload-Dateien. Optionale Transportfelder sind kein Versprechen, dass jeder Geschäftsvorgang sie weglassen kann: Die Projekterstellung lehnt beispielsweise einen fehlenden Namen in ihrem Handler ab.

KonventionKundenverhalten
PfadparameterErsetzen Sie das benannte Segment und kodieren Sie seinen Wert per URL. Behandeln Sie einen Bezeichner als ein einzelnes Segment.
AbfrageparameterKodieren Sie deklarierte Werte. Paginierung und Filterung erfolgen pro Endpunkt; Es gibt keinen universellen Seitengrößenvertrag.
JSON-NutzlastSenden Sie das deklarierte Objekt mit Content-Type: application/json. Erforderliche Anwesenheit und das Akzeptieren von Null sind unabhängig voneinander.
Mehrteilige NutzlastErstellen Sie Formularteile mit dem Upload-Client oder FormData. Lassen Sie den Transport seine Grenze wählen.
Binär-, JavaScript- oder Stream-AntwortVerbrauchen Sie den deklarierten Medientyp. Rufen Sie nicht an response.json() bedingungslos.
FehlerÜberprüfen Sie den HTTP-Status und dekodieren Sie die deklarierte Fehlerform des Endpunkts. Fehlerumschläge unterscheiden sich je nach Ressourcenfamilie.
Wiederholter SchreibversuchLesen Sie den Status nach einem unterbrochenen Vorgang, bevor Sie eine Mutation erneut übermitteln. Der Vertrag sieht keinen universellen Idempotenzschlüsselmechanismus vor.

Generierte Referenzpflege

packages/web/script/generate-api-reference.mjs liest den verfassten Vertrag mithilfe der installierten Effect-Implementierung des API-Pakets und schreibt den Referenz-JSON. Der Dokumentationsarbeiter konsumiert den generierten Inhalt; Der Anwendungsserver wird nicht für die Beantwortung von Dokumentationsanfragen initialisiert.

Aus Paketen/Web
bun run generate:api-reference
bun run check:api-reference
bun run check:docs-index

Die Ressourcenabdeckung wird anhand jedes deklarierten Vorgangs überprüft. Eine neu hinzugefügte Gruppe muss leserorientierte Metadaten und Navigation erhalten und eine geänderte Anfrage oder Antwort muss neu generiert werden. Handschriftliche Leitfäden erläutern immer noch Autorisierungsregeln, Nebenwirkungen, Dienstkonfiguration und Einschränkungen, die ein HTTP-Schema allein nicht ausdrücken kann.

Integrationsrezepte

Beginnen Sie mit erfasste HTTP-Anfragen um zu sehen, wie Projekterstellung, Geschäftsvalidierung, Trägerablehnung, zugehörige Datensätze und Schlüsselwertpersistenz tatsächlich reagieren. Verwenden typisierte Client-Integration um diese Vorgänge mit dem Promise SDK oder dem Effect-Client zu reproduzieren und ihre unterschiedlichen Fehlerkanäle zu verwalten.

IntegrationVerfahrenSchlüsselzustand, der beibehalten werden soll
ProjektredakteurArbeiten erstellen, speichern und erneut öffnenProjekt-/Ressourcenidentität, gespeicherte Daten, tatsächliche Aktualisierungssemantik.
FertigungspipelineEinen nativen Job generieren und beibehaltenErfasste Anfrage, genaue NC/Programm, Freigabeansprüche, passendes tragbares Dokument.
Assistenten-BenutzeroberflächeEreignisse konsumieren und Sitzungen wiederherstellenProjekt-/Sitzungsidentität, ausstehende Berechtigungen/Fragen, Terminal-Turn-Status.
Externe FähigkeitErstellen Sie ein unterstütztes PluginManifest, Modulexporte, Funktionsgewährung, Argumentvalidierung und Toolergebnis.
Überprüfen Sie die AutomatisierungVersionierung und Überprüfung der ProjektarbeitCommit/Ref, struktureller Unterschied, Überprüfungen, festgeschriebener Workflow, einzelne Prüfausgaben.
Gepaarter ClientAktivieren und verwalten Sie den GerätezugriffGateway-Adresse, Zertifikat-Fingerabdruck, individuell widerrufbarer Geräte-Token.

Diese Rezepte verbinden HTTP-Verträge mit dem tatsächlichen Dienstverhalten. Ein Schema kann die erforderliche Präsenz, Kodierung und eine zurückgegebene Form beschreiben; Der verlinkte Leitfaden erklärt Zugriffsregeln, Persistenzeffekte, unterstützte Wiederherstellung und Einschränkungen, die sich nicht allein aus diesen Typen ableiten lassen.

Vorgänge pro Ressourcengruppe

Der Vertrag deklariert derzeit 270 Vorgänge in 34 Gruppen, alle unter einer einzigen bearer HTTP-Sicherheitsschema. Die einzige Operation ohne Trägersicherheit ist die Untersuchung der öffentlichen Gesundheit. Die Tabelle wird aus dem generierten OpenAPI-Dokument berechnet: Operationen pro Gruppe, die verwendeten HTTP-Methoden, wie viele verschiedene Pfade und ein repräsentativer Pfad.

GruppeEtikettOpsMethodenWegeBeispielpfad
Gesundheithealth1GET 11/api/health
Systemsystem2GET 22/health
Projekteprojects5DELETE 1, GET 2, POST 1, PUT 12/api/projects
Zeichnungendrawings5DELETE 1, GET 2, POST 1, PUT 12/api/drawings/{id}
Komponentencomponents5DELETE 1, GET 2, POST 1, PUT 12/api/components/{id}
Exaktes CADcadExact3POST 33/api/cad/exact/analyze
Werkzeugwegetoolpaths7DELETE 1, GET 3, POST 2, PUT 13/api/drawings/{id}/toolpaths
Werkzeugwege projizierenprojectToolpaths2GET 1, POST 11/api/projects/{id}/toolpaths
BearbeitungtoolpathGenerator5POST 55/api/toolpaths/generate
WerkzeugwegverlauftoolpathExtras8DELETE 1, GET 3, POST 3, PUT 15/api/toolpaths/library
Materialienmaterials5DELETE 1, GET 2, POST 1, PUT 12/api/materials
MateriallagerungmaterialsStorage5DELETE 1, GET 2, POST 22/api/materials/export-import
Werkzeugetools5DELETE 1, GET 2, POST 1, PUT 12/api/tools
WerkzeugaufbewahrungtoolsStorage7DELETE 1, GET 3, POST 33/api/tools/export-import
MaschinenmachineConfigs6DELETE 1, GET 2, POST 2, PUT 13/api/machine-configs
MaschinenlagerungmachineConfigsStorage5DELETE 1, GET 2, POST 22/api/machine-configs/export-import
Bibliotheklibrary8DELETE 1, GET 5, POST 1, PUT 15/api/library
Produktionskostenproduction-costs21DELETE 4, GET 8, POST 5, PUT 49/api/production-costs/estimates
KI-Sitzungen und -Aktionenai34DELETE 3, GET 8, POST 21, PUT 232/api/ai/actions
Historie und Arbeitsabläufevcs22GET 10, POST 11, PUT 119/api/projects/{id}/actions/dispatch
Projektveranstaltungenevents1GET 11/api/projects/{id}/events
Begleiterpaarungcompanion5DELETE 1, GET 1, POST 35/api/companion
Pluginsplugins16DELETE 1, GET 8, PATCH 1, POST 4, PUT 212/api/plugins
MCP-Konfigurationmcp8DELETE 2, GET 2, POST 2, PUT 23/api/mcp/config
Dateienfiles2GET 1, POST 12/api/download
Schlüsselwertspeicherkv4DELETE 1, GET 2, PUT 12/api/kv
Organisationenorganizations5DELETE 1, GET 2, POST 1, PUT 12/api/organizations
Benachrichtigungennotifications4DELETE 1, GET 1, POST 1, PUT 13/api/notifications
Authentifizierungauth12GET 1, POST 1112/api/auth/forgot-password
Benutzeruser16DELETE 2, GET 10, POST 2, PUT 212/api/user/api-keys
Abrechnungbilling15DELETE 1, GET 5, POST 8, PUT 110/api/better-auth-stripe/billing-portal
Analytikanalytics10DELETE 1, GET 7, POST 29/api/analytics
Anwendungsdienstemisc10DELETE 2, GET 3, POST 4, PUT 16/api/app-control/notify
Wartelistewaitlist1POST 11/api/waitlist

Statuscodes im gesamten Vertrag

Zählt man jede deklarierte Antwort einmal pro Vorgang, erhält man folgendes Bild davon, was ein Client zum Dekodieren bereit sein muss:

StatusDeklariert amTypischer Körper
200242 VorgängeRessource, Array, nullbarer Wert oder Envelope
20128 VorgängeDer erstellte Datensatz (z.B POST /api/projects)
2041-VorgangKein Körper
400206 VorgängeBadRequest, EnvBadRequest und familienspezifische Varianten
401269 VorgängeUnauthorized (träger-Middleware)
403101 VorgängeForbidden / EnvForbidden
404149 VorgängeNotFound / EnvNotFound
40530 VorgängeEnvMethodNotAllowed / KeyedMethodNotAllowed
40929 VorgängeConflict / EnvConflict
500264 VorgängeInternalError, EnvInternal, KeyedInternal und Familienvarianten
501, 503Jeweils 1 VorgangEndpunktspezifisch

Jeder Fehler ist ein mit Effect markierter Fehler, daher enthält sein JSON-Körper immer a _tag diskriminator neben seinen Feldern. Es gibt drei Körperfamilien, die von den alten Handlern übernommen wurden, sodass bestehende Clients weiterhin funktionieren:

Einfacher Fehler (nur Nachricht)
{ "_tag": "NotFound", "message": "Project not found" }
Umschlagfehler
{ "_tag": "EnvNotFound", "success": false, "message": "Material not found", "errors": null }
Schlüsselfehler (einige Bibliotheksrouten)
{ "_tag": "KeyedInternal", "error": "Failed to load components" }

Erfolgsumschläge spiegeln den Fehlerumschlag wider: { success: true, message, data }, wo data vielleicht null. Der EnvelopeOpt variante weggelassen message wenn der Hundeführer keines zur Verfügung gestellt hat. Einschalten _tag und nicht auf der Anwesenheit von message oder error.

Wie eine Anfrage bearbeitet wird

kundeholen / SDK routenübereinstimmungmethode + Pfad inhaberscheck401 Nicht autorisiert schema-Dekodierung400 wegen fehlerhafter Eingabe handlerzugriff + Logik kodierenerfolg / _tag x-session-token wählt das aktive Konto aus; fehlt oder ungültig ist, wird auf das lokale Profil zurückgegriffen
  1. Der Router gleicht Methode und Pfad ab. Unbekannte Routen erreichen nie einen Handler.
  2. Die Träger-Middleware vergleicht den Token in konstanter Zeit. Ein fehlendes oder falsches Token stoppt die Anfrage mit 401 vor der Dekodierung.
  3. Pfad, Abfrage, Header und Text werden anhand der Schemata des Vorgangs dekodiert. Strukturelle Probleme werden zu 400, ohne dass Geschäftscode ausgeführt wird.
  4. Der Handler löst das handelnde Konto auf, prüft den Besitz oder die Organisationsmitgliedschaft (403/404) und führt den Dienst aus.
  5. Das Ergebnis wird mit dem deklarierten Erfolgsschema oder der Fehler mit seinem getaggten Fehlerschema und Status codiert.

Antworten, die nicht JSON sind

BetriebMedientypWie man konsumiert
POST /api/ai/chat/streamtext/event-streamInkrementell lesen; jede data: zeile ist ein typisiertes Assistentenereignis.
GET /api/projects/{id}/eventstext/event-streamLive-Projektveranstaltungen; Stellen Sie die Verbindung wieder her und lesen Sie den Status nach einem Ausfall erneut.
GET /api/plugins/bootstrap.jsapplication/javascriptWird vom Plugin-Host geladen und nicht als JSON analysiert.
GET /api/plugins/serveapplication/octet-streamPlugin-Dateibytes.
GET /api/downloadapplication/zipAls Datei speichern; verwenden response.blob() oder auf Festplatte streamen.

Das generierte Promise SDK lehnt eine Streaming-Antwort ab, deren Inhaltstyp es nicht ist text/event-stream mit ClientError("UnsupportedContentType")und ein einzelnes SSE-Ereignis größer als 16 MiB mit SseEventTooLarge.

Aufruf der API ohne Client

Minimal typisierter Fetch-Wrapper
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" },
)

Bevorzugen Sie die generierten Clients in TypeScript: Sie kennen den Erfolgsstatus und die deklarierten Fehlerstatus jeder Operation und behandeln alles andere als UnexpectedStatus statt zu raten.

In 3D

API-Gruppen nach Größe Zum Orbit ziehen · zum Zoomen scrollen · zum Schwenken mit der rechten Maustaste ziehen
Every API group as a column, height = operations counted from the generated OpenAPI document (270 in total). Rows are the six sidebar categories; ai (34), history (22) and costs (21) are the largest groups.