Документация
Справочник по API
Полная ссылка на ресурсы HTTP, локальный доступ с проверкой подлинности, контракты потоковой передачи и клиенты, созданные на основе общих схем.
Автоматически переведено с английского. Смотреть оригинал на английском
Обзор
Сайдкар представляет собой одиночный эффект HttpApi. Каждая конечная точка является типизированным HttpApiEndpoint с телами запросов и ответов с проверкой схемы, поэтому эта ссылка, сгенерированный SDK и работающий сервер происходят из одного и того же объявления в packages/api.
По путям 232 и группам ресурсов 35.
Формы запроса, ответа и ошибки, каждая из которых связана с операциями, которые ее используют.
Испускаемый сайдкаром в /api/openapi.json; снимок в packages/web проверяется bun run check:api-reference.
Веб-просмотр на рабочем столе, мобильный компаньон, мост AI и сценарии — все они вызывают одни и те же маршруты.
Базовый URL
Размещенного API CADCAMFUN не существует. Сайдкар работает на вашей машине, связывает 127.0.0.1 на порту, выбранном операционной системой (она прослушивает порт 0), проверяет свой собственный /api/healthи только затем печатает одну строку JSON на стандартный вывод. Базовый URL-адрес http://127.0.0.1:<port> из этой линии.
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 Порт меняется при каждом запуске
ready (оболочка рабочего стола делает именно это) вместо того, чтобы принимать фиксированное число. Журналы передаются на stderr, поэтому стандартный вывод передает только события готовности или ошибки. Аутентификация
В контракте заявлена одна схема безопасности, bearer (HTTP Bearer). 324 из 325 операций требуют этого; только GET /api/health является общедоступным.
| Полномочия | Отправлено как | Используется |
|---|---|---|
| Запустить токен | Authorization: Bearer <token> | Веб-просмотр рабочего стола и локальные сценарии; ценность CADCAMFUN_TOKEN. |
| Токен-компаньон | Authorization: Bearer <token> | Сопряженный телефон; более узкий доступ, см. компаньон в паре. |
| Сеанс аккаунта | x-session-token | Выбирает действующую учетную запись поверх токена на предъявителя; видеть личность ниже. |
curl -s "$CADCAMFUN_URL/api/health"
curl -s "$CADCAMFUN_URL/api/projects" -H "Authorization: Bearer $CADCAMFUN_TOKEN" Конвенции
- JSON на входе, JSON на выходе. Тела
application/jsonесли на карточке не указано иное: две составные загрузки, один веб-перехватчик октетного потока, загрузочный файл JavaScript, загрузка в формате zip, двоичный файл плагина и два потока событий. - Идентификаторы операций отмечены точками.
projects.get,vcs.commit: тег группы, точка, имя метода, используемое сгенерированными клиентами. - Ошибки типизированы. Сбои объявляются для каждой конечной точки и влекут за собой
_tag; включите его вместо разбора сообщений. В контракте 401 объявляется в операциях 269, 500 в 264 и 400 в 206. - Операционные якоря стабильны. Каждая карта может быть связана как
#op-<method>-<path>, например/docs/api/projects#op-get-api-projects-id.
Потоковое вещание
| Путь | Форма | несет |
|---|---|---|
GET /api/projects/{id}/events | СШЭ | Изменение событий для одного проекта. |
POST /api/ai/chat/stream | СШЭ | Выходные данные помощника по мере его создания, плюс сердцебиение; видеть ИИ-стриминг. |
curl -N "$CADCAMFUN_URL/api/projects/$PROJECT_ID/events" \
-H "Authorization: Bearer $CADCAMFUN_TOKEN" Клиенты
@cadcamfun/api/sdk генерируется из этого же контракта: каждый идентификатор операции ниже является типизированным методом CadCam.make(...), принимая один простой ввод параметров пути и полей тела. Генерируется 259 из 325 операций; каждая карта показывает свое точное название.
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" }) Ресурсы
Операции 325 в группах 35, упорядоченные по тому, что они обслуживают.
Основной
1 endpointsПроверка работоспособности общедоступного процесса со статусом и меткой времени.
2 endpointsАутентифицированная готовность и версия приложения, используемая собственными клиентами.
2 endpointsСобытия, отправляемые сервером в рамках проекта, для работающих клиентов.
4 endpointsСовместимые с JSON записи предпочтений и контекста со списком префиксов и операциями для каждой клавиши.
2 endpointsОперации загрузки и выгрузки с полезной нагрузкой, зависящей от конечной точки, и кодировкой ответа.
Дизайн
5 endpointsСоздавайте, просматривайте, читайте, обновляйте и удаляйте проекты с проверкой доступа владельца и организации.
8 endpointsЧертежи проектов, компоненты, траектории движения инструментов, библиотечные ресурсы, доступные только для чтения, а также ограниченные предварительные просмотры для сопутствующих клиентов.
7 endpointsЧертежи проекта и их сохраненная геометрия, метаданные и операции обновления.
5 endpointsМногоразовые компоненты проекта и их сохраняемые проектные данные.
5 endpointsАнализируйте точную геометрию, экспортируйте STEP и проверяйте взаимосвязи сборок на основе снимков сцены или сохраненных чертежей.
8 endpointsЗаписи общей библиотеки и коллекции поиска компонентов, материалов и инструментов.
Производство
9 endpointsСохраненные программы обработки, ассоциации чертежей и проверенная переносная производственная документация.
2 endpointsСписок и создание траекторий инструмента в рамках проекта с конвертами ответов для конкретных конечных точек.
5 endpointsСобственное производство, генерация G-кода на основе настроек, предложения, анализ и проверка воспроизведения.
8 endpointsВерсии траекторий, восстановление, обнаружение библиотек и комментарии к программам.
21 endpointsОценки, запросы на расчеты, материальные затраты, эксплуатационные расходы и записи об износе инструментов.
Ресурсы
5 endpointsЗаписи о материалах, свойства обработки приложений и доступ к ресурсам.
5 endpointsВложения для хранения материалов и импорт/экспорт JSON для обмена библиотеками.
5 endpointsЗаписи о фрезах и размеры, используемые в рабочих процессах обработки.
7 endpointsДанные о хранении и сборе инструментов или импорт/экспорт каждого инструмента.
7 endpointsЗаписи конфигурации машины, обновления, удаление и клонирование.
5 endpointsПриложения для хранения машин и импорт/экспорт конфигурации.
Расширения
52 endpointsПровайдеры, учетные данные, разговоры, очереди потоковой передачи, вызов действий, токены моста, навыки и восстановление сеанса.
22 endpointsСовместимые с Git проекта коммиты, ветки, восстановления, проверки, зеркалирование GitHub и диспетчеризация рабочих процессов.
16 endpointsРеестр плагинов, установка пакетов, настройка, включение/отключение и обслуживание ресурсов плагина.
8 endpointsКонфигурация соединения MCP CRUD и запросы информации о сервере.
5 endpointsСостояние шлюза рабочего стола, включение/отключение, сопряжение устройств и отзыв устройств.
Счета
15 endpointsВход в учетную запись, регистрация, восстановление, проверка, магические ссылки, поиск сеанса и регистрация пароля.
18 endpointsПрофили, ресурсы учетной записи, ключи API, записи токенов, пароли и удаление учетной записи.
5 endpointsСписки организаций и записи управляемых организаций.
4 endpointsСписок уведомлений, обновления состояния чтения, удаление и пометка всех прочитанных.
15 endpointsИнформация о подписке, интеграция оформления заказа/портала Stripe, пробное обслуживание и прием подписанного веб-перехватчика.
10 endpointsПоказатели приложений, недавняя активность, запросы об использовании и запросы на отслеживание.
10 endpointsМаршруты интеграции с рабочим столом, отслеживаемые операции проекта, уведомления и записи принудительной подписки.
1 endpointsОтправьте регистрацию в список ожидания через API локального приложения.
документ OpenAPI
Скачать /docs/api/openapi.json (зарегистрированный снимок, отображаемый на этом сайте) или получить действующий документ из работающей сайдкара по адресу /api/openapi.json. Восстановите снимок с помощью bun run generate:api-reference в packages/web после изменения конечной точки.
Контракт и сервер
@cadcamfun/api определяет схемы запросов и ответов с помощью Effect HttpApi. Он экспортирует корень Api, записи домена, ошибки с тегами и клиенты. Обработчики запросов, решения об авторизации, запросы к базе данных и вызовы провайдеров выполняются в боковой панели. Импорт схемы не запускает сервер.
Сайдкар публикует свой обслуживаемый контракт на GET /api/openapi.json. Используйте этот рабочий документ для проверки методов, параметров пути, полезных данных и кодов состояния приложения, к которому вы подключены. Сервер собирает свои группы в apps/sidecar/src/layers.ts; общий контракт собран в packages/api/src/index.ts.
Семейства ресурсов
- Дизайн: проекты, чертежи, компоненты, версии чертежей, импорт/экспорт объектов, точный анализ САПР, экспорт STEP и анализ сборок.
- Производство: траектории и версии инструмента, комментарии, предложения генератора, синтаксический анализ, проверка воспроизведения, собственные производственные задания, материалы, инструменты, конфигурации станков, элементы библиотеки и производственные затраты.
- Ассистент: поставщики, учетные данные, модели, сеансы, очереди потоковой передачи, элементы управления сеансами, действия, память проекта, контекст рабочей области и советы без сохранения состояния.
- Сотрудничество: ветки, коммиты, различия, запросы на включение, обзоры, зеркала GitHub, файлы и запуски рабочих процессов, события в реальном времени и сопряжение сопутствующих ресурсов.
- Сервисы приложений: пользователи, аутентификация, организации, уведомления, файлы, плагины, выставление счетов, аналитика, список ожидания, конфигурация MCP и локальное хранилище значений ключа.
Группы контрактов сохраняют свои формы ответа, специфичные для конечной точки. Клиент должен декодировать схему операции, которую он вызывает, вместо того, чтобы использовать единый конверт JSON для всего приложения.
Ответы и неудачи
Распространенные ошибки с тегами сопоставляются с HTTP 400 (BadRequest), 401 (Unauthorized), 403 (Forbidden), 404 (NotFound), 405 (MethodNotAllowed), 409 (Conflict) и 500 (InternalError). Их заявленные схемы имеют удобочитаемый для человека вид. message. Некоторые группы используют конверт с success: false, message, и errors; небольшое количество использует error поле.
Ответы об успехе могут быть записью, массивом, значением, допускающим значение NULL, или конвертом. Envelope включает в себя success, message, и data; EnvelopeOpt делает сообщение необязательным. Конечные точки создания явно объявляют 201, где это необходимо. Не делайте вывод об успехе исключительно на основе поля JSON, не проверив статус HTTP и схему конечной точки.
Декодирование схемы проверяет входные данные транспорта перед выполнением обработчика. Бизнес-проверка по-прежнему выполняется в службе: структурно допустимый запрос может ссылаться на недоступный чертеж, содержать устаревший производственный артефакт или запрашивать конфликтующую операцию ветвления.
Используйте общий клиент
ApiClient.layer занимает baseUrl и приложение token. Он предоставляет транспорт выборки и промежуточное программное обеспечение для авторизации клиента. Его методы взяты непосредственно из Api, поэтому этот клиент также охватывает операции, пропущенные при генерации кода.
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 }))) Базовый URL-адрес — это адрес обратной связи и назначенный порт боковой панели. Решите проблему с помощью подключения к рабочему столу, а не сохраняйте порт при каждом запуске. Не допускайте попадания токенов в URL-адреса и журналы.
Запросы на проектирование и изготовление
Использование проектных операций /api/projects; чертежи и траектории имеют свои собственные коллекции и подробные маршруты. POST /api/toolpaths/generate создает G-код, анализируемые данные программы, предупреждения и статистику на основе настроек генератора и геометрии. /suggest, /parse, и /verify предоставляйте рекомендации по параметрам, интерпретацию G-кода и воспроизведение акций. Эти вычисления не создают сохраненную траекторию инструмента.
POST /api/toolpaths/manufacture принимает версионный снимок САПР и возвращает результат ядра с ЧПУ, назначениями инструментов, данными резки, заявлениями, проблемами и уровнем выпуска. Сохраните результирующий документ отдельно с помощью операции создания или обновления траектории. Видеть Настройки для проверки доказательств во время стойкости.
POST /api/cad/exact/analyze, /step, и /assembly принять явные элементы или сохраненный идентификатор чертежа. При чтении сохраненного рисунка применяются обычные проверки доступа к рисунку вызывающего объекта.
Потоковая передача и восстановление
Поток AI переносит типизированные события для текста, рассуждений, вызовов и результатов инструментов, запросов разрешений и вопросов, повторных попыток, состояния хода, контекста и завершения. Клиенты должны получать события постепенно и сохранять идентификатор сеанса. Завершение HTTP-соединения не является достаточным свидетельством завершения поворота модели: состояние сеанса можно прочитать снова после повторного подключения.
Схемы событий ИИ живут в packages/api/src/ai-events.ts и packages/ai/src/events.ts. Общие события в реальном времени используют группу событий. Двоичные загрузки, ответы начальной загрузки плагина JavaScript и подписанные необработанные тела веб-перехватчиков требуют собственной обработки транспорта.
Список маршрутов, которые используют страницы их результатов page и limit параметры запроса. Для конфигураций машины, page по умолчанию — 1, limit по умолчанию используется 20 и ограничивается 1–100, а ответ передает pagination с page, limit, total, и totalPages (apps/sidecar/src/http/machine-configs.ts). Проверьте справочную страницу каждой группы на предмет параметров, которые она фактически объявляет.
Созданные SDK
@cadcamfun/httpapi-codegen отражает группы HttpApi в метаданных операции и созданных клиентах. Генератор API записывает Promise SDK в packages/api/src/sdk/generated и воздействовать на клиентов, чтобы packages/api/src/client/generated. Публичный Promise SDK экспортируется как @cadcamfun/api/sdk.
bun run --filter @cadcamfun/api generate
bun run --filter @cadcamfun/api generate:check В обеих сгенерированных целях отсутствуют многочастная загрузка профиля, многокомпонентная установка плагина, создание MCP с несколькими схемами успеха, обновление MCP с конфликтующими идентификаторами, создание траектории проекта с повторяющимися входными именами и обслуживание файла плагина с заголовками потока. Цель Promise также не включает в себя необработанные веб-перехватчики Stripe, загрузку плагина JavaScript, загрузку двоичных файлов и запросы генерации/предложения генератора. Эти упущения очевидны в packages/api/scripts/generate-clients.ts; использовать контрактного клиента или соответствующий необработанный транспорт для этих операций.
Исходная организация
groups/ содержит контракты ресурсов. Общая геометрия и схемы CAM взяты из @cadcamfun/core; cad-exact.ts, cam-kernel.ts, и cam-program.ts описывать богатые результаты CAD/CAM и переносимые документы. client.ts создает контрактный клиент, а сценарий генерации владеет сгенерированными целями и списками пропусков.
Правила интеграции
Повторно используйте схемы контрактов на границах транспорта и сохраняйте зависимости базы данных во вспомогательном компоненте. Представьте конечную точку через ее контракт, обработчик, службу или репозиторий, а также сфокусированное покрытие HTTP вместе. Сгенерированные файлы являются выходными данными: отредактируйте их контракт или генератор и заново сгенерируйте их. Версия схемы API, версия переносимого файла и версия API плагина описывают отдельные контракты.
Ссылка на ресурс
325 операций через 232 пути и 35 группы ресурсов, с 56 именованными схемами. На каждой странице ресурса перечислены его операции и показаны объявленные параметры пути/запроса/заголовка, обязательные и необязательные поля, значения, допускающие значение NULL, типы контента, статусы успеха и ошибки, а также полные схемы.
Данные исходят из packages/api/src/index.ts, тот же составленный контракт HttpApi, используемый клиентами и вспомогательным устройством. На страницах описывается выданный контракт; проверить работающий сервер /api/openapi.json если вы подключитесь к другой версии.
HTTP-ресурс
Здоровье
Проверка работоспособности общедоступного процесса со статусом и меткой времени.
HTTP-ресурс
Система
Аутентифицированная готовность и версия приложения, используемая собственными клиентами.
HTTP-ресурс
Проекты
Создавайте, просматривайте, читайте, обновляйте и удаляйте проекты с проверкой доступа владельца и организации.
HTTP-ресурс
Рабочая область
Чертежи проектов, компоненты, траектории движения инструментов, библиотечные ресурсы, доступные только для чтения, а также ограниченные предварительные просмотры для сопутствующих клиентов.
HTTP-ресурс
Рисунки
Чертежи проекта и их сохраненная геометрия, метаданные и операции обновления.
HTTP-ресурс
Компоненты
Многоразовые компоненты проекта и их сохраняемые проектные данные.
HTTP-ресурс
Точный САПР
Анализируйте точную геометрию, экспортируйте STEP и проверяйте взаимосвязи сборок на основе снимков сцены или сохраненных чертежей.
HTTP-ресурс
Траектории инструмента
Сохраненные программы обработки, ассоциации чертежей и проверенная переносная производственная документация.
HTTP-ресурс
Траектории проекта
Список и создание траекторий инструмента в рамках проекта с конвертами ответов для конкретных конечных точек.
HTTP-ресурс
Обработка
Собственное производство, генерация G-кода на основе настроек, предложения, анализ и проверка воспроизведения.
HTTP-ресурс
История траектории
Версии траекторий, восстановление, обнаружение библиотек и комментарии к программам.
HTTP-ресурс
Материалы
Записи о материалах, свойства обработки приложений и доступ к ресурсам.
HTTP-ресурс
Хранение материалов
Вложения для хранения материалов и импорт/экспорт JSON для обмена библиотеками.
HTTP-ресурс
Инструменты
Записи о фрезах и размеры, используемые в рабочих процессах обработки.
HTTP-ресурс
Хранение инструментов
Данные о хранении и сборе инструментов или импорт/экспорт каждого инструмента.
HTTP-ресурс
Машины
Записи конфигурации машины, обновления, удаление и клонирование.
HTTP-ресурс
Хранение машин
Приложения для хранения машин и импорт/экспорт конфигурации.
HTTP-ресурс
Библиотека
Записи общей библиотеки и коллекции поиска компонентов, материалов и инструментов.
HTTP-ресурс
Затраты на производство
Оценки, запросы на расчеты, материальные затраты, эксплуатационные расходы и записи об износе инструментов.
HTTP-ресурс
Сеансы и действия ИИ
Провайдеры, учетные данные, разговоры, очереди потоковой передачи, вызов действий, токены моста, навыки и восстановление сеанса.
HTTP-ресурс
История и рабочие процессы
Совместимые с Git проекта коммиты, ветки, восстановления, проверки, зеркалирование GitHub и диспетчеризация рабочих процессов.
HTTP-ресурс
События проекта
События, отправляемые сервером в рамках проекта, для работающих клиентов.
HTTP-ресурс
Сопряжение с компаньоном
Состояние шлюза рабочего стола, включение/отключение, сопряжение устройств и отзыв устройств.
HTTP-ресурс
Плагины
Реестр плагинов, установка пакетов, настройка, включение/отключение и обслуживание ресурсов плагина.
HTTP-ресурс
Конфигурация MCP
Конфигурация соединения MCP CRUD и запросы информации о сервере.
HTTP-ресурс
Файлы
Операции загрузки и выгрузки с полезной нагрузкой, зависящей от конечной точки, и кодировкой ответа.
HTTP-ресурс
Хранилище ключей и значений
Совместимые с JSON записи предпочтений и контекста со списком префиксов и операциями для каждой клавиши.
HTTP-ресурс
Организации
Списки организаций и записи управляемых организаций.
HTTP-ресурс
Уведомления
Список уведомлений, обновления состояния чтения, удаление и пометка всех прочитанных.
HTTP-ресурс
Аутентификация
Вход в учетную запись, регистрация, восстановление, проверка, магические ссылки, поиск сеанса и регистрация пароля.
HTTP-ресурс
Пользователи
Профили, ресурсы учетной записи, ключи API, записи токенов, пароли и удаление учетной записи.
HTTP-ресурс
Биллинг
Информация о подписке, интеграция оформления заказа/портала Stripe, пробное обслуживание и прием подписанного веб-перехватчика.
HTTP-ресурс
Аналитика
Показатели приложений, недавняя активность, запросы об использовании и запросы на отслеживание.
HTTP-ресурс
Службы приложений
Маршруты интеграции с рабочим столом, отслеживаемые операции проекта, уведомления и записи принудительной подписки.
HTTP-ресурс
Список ожидания
Отправьте регистрацию в список ожидания через API локального приложения.
Скачать OpenAPI JSON · Отслеживайте запросы с записанными ответами
Соглашения о подключении и запросе
API предоставляется локальным дополнительным модулем, а не фиксированной размещенной конечной точкой. Tauri получает динамически выбранный URL-адрес обратной связи и токен запуска. Запускаемая вручную сайдкар объявляет о своем порте в событии готовности JSON. Вместо этого сопряженный мобильный клиент подключается через настроенный шлюз HTTPS.
curl --silent --show-error "$CADCAMFUN_URL/api/projects" \
--header "Authorization: Bearer $CADCAMFUN_TOKEN" Установите обе переменные из фактического соединения. В шаблонах запросов на страницах ресурсов намеренно используются заполнители и файлы полезной нагрузки. Необязательные транспортные поля не являются обещаниями, что каждая бизнес-операция может их пропустить: например, создание проекта отклоняет отсутствующее имя в его обработчике.
| Соглашение | Поведение клиента |
|---|---|
| Параметры пути | Замените именованный сегмент и закодируйте его значение в URL-адресе. Рассматривайте идентификатор как один сегмент. |
| Параметры запроса | Кодируйте объявленные значения. Пагинация и фильтрация выполняются для каждой конечной точки; универсального контракта на размер страницы не существует. |
| Полезная нагрузка JSON | Отправьте объявленный объект с помощью Content-Type: application/json. Требуемое присутствие и принятие значения null независимы. |
| Составная полезная нагрузка | Создавайте части формы с помощью клиента загрузки или FormData; позвольте транспорту выбрать свою границу. |
| Двоичный, JavaScript или потоковый ответ | Использовать заявленный тип носителя. Не звони response.json() безоговорочно. |
| Ошибки | Проверьте статус HTTP и декодируйте заявленную форму отказа конечной точки. Конверты ошибок различаются в зависимости от семейства ресурсов. |
| Повторная попытка записи | Считайте состояние после прерванной операции перед повторной отправкой мутации. Контракт не предоставляет универсальный механизм идемпотентного ключа. |
Создано эталонное обслуживание
packages/web/script/generate-api-reference.mjs считывает составленный контракт, используя установленную реализацию Effect пакета API, и записывает эталонный JSON. Worker документации потребляет сгенерированный контент; он не инициализирует сервер приложений для ответа на запросы документации.
bun run generate:api-reference
bun run check:api-reference
bun run check:docs-index Покрытие ресурсов проверяется по каждой объявленной операции. Вновь добавленная группа должна получить метаданные и навигацию, предназначенные для читателя, а измененный запрос или ответ должен быть создан заново. Рукописные руководства по-прежнему объясняют правила авторизации, побочные эффекты, конфигурацию службы и ограничения, которые не может выразить одна только схема HTTP.
Рецепты интеграции
Начните с перехваченные HTTP-запросы чтобы увидеть, как на самом деле реагируют создание проекта, бизнес-проверка, отклонение носителя, связанные записи и сохранение значений ключей. Использовать типизированная клиентская интеграция для воспроизведения этих операций с помощью Promise SDK или клиента Effect и обработки их отдельных каналов сбоев.
| Интеграция | Процедура | Ключевое состояние для сохранения |
|---|---|---|
| Редактор проекта | Создание, сохранение и повторное открытие работы | Идентификация проекта/ресурса, сохраненные данные, фактическая семантика обновления. |
| Производственный трубопровод | Создание и сохранение собственного задания | Собранный запрос, точное ЧПУ/программа, заявления о выпуске, соответствующий переносимый документ. |
| Пользовательский интерфейс помощника | Потребление событий и восстановление сеансов | Идентификатор проекта/сеанса, ожидающие разрешения/вопросы, состояние поворота терминала. |
| Внешние возможности | Создайте поддерживаемый плагин | Манифест, экспорт модулей, предоставление возможностей, проверка аргументов и результат инструмента. |
| Обзор автоматизации | Версия и обзор работы проекта | Коммит/ссылка, структурные различия, обзоры, зафиксированный рабочий процесс, результаты отдельных проверок. |
| Парный клиент | Включение и управление доступом к устройствам | Адрес шлюза, отпечаток сертификата, индивидуально отзываемый токен устройства. |
Эти рецепты связывают контракты HTTP с реальным поведением службы. Схема может описывать требуемое присутствие, кодировку и возвращаемую форму; связанное с ним руководство объясняет правила доступа, эффекты сохранения, поддерживаемое восстановление и ограничения, которые нельзя вывести только на основе этих типов.
Операции на группу ресурсов
В настоящее время в контракте объявлены операции 270 в группах 34, все в одном bearer Схема безопасности HTTP. Единственная операция без защиты носителя — это проверка общественного здравоохранения. Таблица вычисляется на основе сгенерированного документа OpenAPI: операций на группу, используемых методов HTTP, количества различных путей и одного репрезентативного пути.
| Группа | Ярлык | Операции | Методы | Пути | Пример пути |
|---|---|---|---|---|---|
| Здоровье | health | 1 | ПОЛУЧИТЬ 1 | 1 | /api/health |
| Система | system | 2 | ПОЛУЧИТЬ 2 | 2 | /health |
| Проекты | projects | 5 | УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 1, ПОСТАВИТЬ 1 | 2 | /api/projects |
| Рисунки | drawings | 5 | УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 1, ПОСТАВИТЬ 1 | 2 | /api/drawings/{id} |
| Компоненты | components | 5 | УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 1, ПОСТАВИТЬ 1 | 2 | /api/components/{id} |
| Точный САПР | cadExact | 3 | СООБЩЕНИЕ 3 | 3 | /api/cad/exact/analyze |
| Траектории инструмента | toolpaths | 7 | УДАЛИТЬ 1, ПОЛУЧИТЬ 3, ОТПРАВИТЬ 2, ПОСТАВИТЬ 1 | 3 | /api/drawings/{id}/toolpaths |
| Траектории проекта | projectToolpaths | 2 | ПОЛУЧИТЬ 1, ОТПРАВИТЬ 1 | 1 | /api/projects/{id}/toolpaths |
| Обработка | toolpathGenerator | 5 | СООБЩЕНИЕ 5 | 5 | /api/toolpaths/generate |
| История траектории | toolpathExtras | 8 | УДАЛИТЬ 1, ПОЛУЧИТЬ 3, ОТПРАВИТЬ 3, ПОСТАВИТЬ 1 | 5 | /api/toolpaths/library |
| Материалы | materials | 5 | УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 1, ПОСТАВИТЬ 1 | 2 | /api/materials |
| Хранение материалов | materialsStorage | 5 | УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 2 | 2 | /api/materials/export-import |
| Инструменты | tools | 5 | УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 1, ПОСТАВИТЬ 1 | 2 | /api/tools |
| Хранение инструментов | toolsStorage | 7 | УДАЛИТЬ 1, ПОЛУЧИТЬ 3, ОТПРАВИТЬ 3 | 3 | /api/tools/export-import |
| Машины | machineConfigs | 6 | УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 2, ПОСТАВИТЬ 1 | 3 | /api/machine-configs |
| Хранение машин | machineConfigsStorage | 5 | УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 2 | 2 | /api/machine-configs/export-import |
| Библиотека | library | 8 | УДАЛИТЬ 1, ПОЛУЧИТЬ 5, ОТПРАВИТЬ 1, ПОСТАВИТЬ 1 | 5 | /api/library |
| Затраты на производство | production-costs | 21 | УДАЛИТЬ 4, ПОЛУЧИТЬ 8, ОТПРАВИТЬ 5, ПОСТАВИТЬ 4 | 9 | /api/production-costs/estimates |
| Сеансы и действия ИИ | ai | 34 | УДАЛИТЬ 3, ПОЛУЧИТЬ 8, ОТПРАВИТЬ 21, ПОСТАВИТЬ 2 | 32 | /api/ai/actions |
| История и рабочие процессы | vcs | 22 | GET 10, POST 11, PUT 1 | 19 | /api/projects/{id}/actions/dispatch |
| События проекта | events | 1 | ПОЛУЧИТЬ 1 | 1 | /api/projects/{id}/events |
| Сопряжение с компаньоном | companion | 5 | УДАЛИТЬ 1, ПОЛУЧИТЬ 1, ОТПРАВИТЬ 3 | 5 | /api/companion |
| Плагины | plugins | 16 | УДАЛИТЬ 1, ПОЛУЧИТЬ 8, ИСПРАВИТЬ 1, ОТПРАВИТЬ 4, ПОСТАВИТЬ 2 | 12 | /api/plugins |
| Конфигурация MCP | mcp | 8 | УДАЛИТЬ 2, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 2, ПОСТАВИТЬ 2 | 3 | /api/mcp/config |
| Файлы | files | 2 | ПОЛУЧИТЬ 1, ОТПРАВИТЬ 1 | 2 | /api/download |
| Хранилище ключей и значений | kv | 4 | УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ПОСТАВИТЬ 1 | 2 | /api/kv |
| Организации | organizations | 5 | УДАЛИТЬ 1, ПОЛУЧИТЬ 2, ОТПРАВИТЬ 1, ПОСТАВИТЬ 1 | 2 | /api/organizations |
| Уведомления | notifications | 4 | УДАЛИТЬ 1, ПОЛУЧИТЬ 1, ОТПРАВИТЬ 1, ПОСТАВИТЬ 1 | 3 | /api/notifications |
| Аутентификация | auth | 12 | ПОЛУЧИТЬ 1, ОТПРАВИТЬ 11 | 12 | /api/auth/forgot-password |
| Пользователи | user | 16 | УДАЛИТЬ 2, ПОЛУЧИТЬ 10, ОТПРАВИТЬ 2, ПОСТАВИТЬ 2 | 12 | /api/user/api-keys |
| Биллинг | billing | 15 | УДАЛИТЬ 1, ПОЛУЧИТЬ 5, ОТПРАВИТЬ 8, ПОСТАВИТЬ 1 | 10 | /api/better-auth-stripe/billing-portal |
| Аналитика | analytics | 10 | УДАЛИТЬ 1, ПОЛУЧИТЬ 7, ОТПРАВИТЬ 2 | 9 | /api/analytics |
| Службы приложений | misc | 10 | УДАЛИТЬ 2, ПОЛУЧИТЬ 3, ОТПРАВИТЬ 4, ПОСТАВИТЬ 1 | 6 | /api/app-control/notify |
| Список ожидания | waitlist | 1 | СООБЩЕНИЕ 1 | 1 | /api/waitlist |
Коды статуса по контракту
Подсчет каждого объявленного ответа один раз за операцию дает следующую картину того, что клиент должен быть готов декодировать:
| Статус | Объявлено | Типичный кузов |
|---|---|---|
| 200 | 242 операций | Ресурс, массив, значение, допускающее значение NULL, или Envelope |
| 201 | 28 операций | Созданная запись (например POST /api/projects) |
| 204 | 1 операция | Никто |
| 400 | 206 операций | BadRequest, EnvBadRequest и варианты для конкретного семейства |
| 401 | 269 операций | Unauthorized (промежуточное программное обеспечение носителя) |
| 403 | 101 операций | Forbidden / EnvForbidden |
| 404 | 149 операций | NotFound / EnvNotFound |
| 405 | 30 операций | EnvMethodNotAllowed / KeyedMethodNotAllowed |
| 409 | 29 операций | Conflict / EnvConflict |
| 500 | 264 операций | InternalError, EnvInternal, KeyedInternal и семейные варианты |
| 501, 503 | 1 операция каждая | Конкретно для конечной точки |
Каждая ошибка является ошибкой с тегом Effect, поэтому ее тело JSON всегда содержит _tag дискриминатор рядом со своими полями. Существует три семейства кузовов, унаследованных от устаревших обработчиков, поэтому существующие клиенты продолжают работать:
{ "_tag": "NotFound", "message": "Project not found" } { "_tag": "EnvNotFound", "success": false, "message": "Material not found", "errors": null } { "_tag": "KeyedInternal", "error": "Failed to load components" } Конверты успеха отражают конверт ошибки: { success: true, message, data }, где data может быть null. EnvelopeOpt вариант опускается message когда обработчик его не предоставил. Включить _tag а не о присутствии message или error.
Как обрабатывается запрос
- Маршрутизатор соответствует методу и пути. Неизвестные маршруты никогда не достигают обработчика.
- Промежуточное программное обеспечение носителя сравнивает токен за постоянное время. Отсутствующий или неправильный токен останавливает запрос с помощью 401 перед декодированием.
- Путь, запрос, заголовки и тело декодируются по схемам операции. Структурные проблемы становятся 400 без запуска бизнес-кода.
- Обработчик разрешает действующую учетную запись, проверяет право собственности или членство в организации (403/404) и запускает службу.
- Результат кодируется с помощью объявленной схемы успеха или сбоя с его помеченной схемой ошибки и статусом.
Ответы, которые не являются JSON
| Операция | Тип носителя | Как потреблять |
|---|---|---|
POST /api/ai/chat/stream | text/event-stream | Читайте постепенно; каждый data: строка — это одно типизированное событие-помощник. |
GET /api/projects/{id}/events | text/event-stream | Живые мероприятия проекта; переподключитесь и перечитайте состояние после падения. |
GET /api/plugins/bootstrap.js | application/javascript | Загружается хостом плагина, не анализируется как JSON. |
GET /api/plugins/serve | application/octet-stream | Байты файла плагина. |
GET /api/download | application/zip | Сохранить как файл; использовать response.blob() или транслировать на диск. |
Сгенерированный Promise SDK отклоняет потоковый ответ, тип контента которого не соответствует text/event-stream с ClientError("UnsupportedContentType")и одно событие SSE размером более 16 МиБ с SseEventTooLarge.
Вызов API без клиента
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" },
) Предпочитайте сгенерированные клиенты в TypeScript: они знают статус успеха каждой операции и объявленные статусы ошибок, а все остальное рассматривают как UnexpectedStatus вместо того, чтобы гадать.