← Sandbox SDK / sandbox / bridge
Справочник по HTTP API
Эта страница описывает каждый маршрут, предоставляемый мост песочницы в стабильном шаблоне.
Аутентификация
Все маршруты внутри /v1/sandbox/* и /v1/openapi.* требуют Bearer-токен:
Authorization: Bearer <SANDBOX_API_KEY>Когда SANDBOX_API_KEY не настроен, аутентификация пропускается для удобства локальной разработки. Перед развертыванием в продакшене обязательно задайте секрет.
схема OpenAPI
Мост предоставляет собственную документацию по API:
| Метод | Маршрут | Описание |
|---|---|---|
GET |
/v1/openapi.json |
Машиночитаемая схема OpenAPI 3.1. |
GET |
/v1/openapi |
Интерактивная документация в формате HTML. |
Оба маршрута принимают аутентификацию через заголовок Bearer или ?token= параметр запроса.
При локальном запуске с npm run dev, откройте http://localhost:8787/v1/openapi в браузере, чтобы интерактивно изучить каждую конечную точку.
Жизненный цикл песочницы
| Метод | Маршрут | Описание |
|---|---|---|
POST |
/v1/sandbox |
Создаёт новую песочницу. Возвращает {"id": "<sandbox-id>"}. |
DELETE |
/v1/sandbox/:id |
Уничтожает контейнер sandbox. Возвращает 204. |
GET |
/v1/sandbox/:id/running |
Проверка активности контейнера. Возвращает {"running": true|false}. |
Выполнение команд
| Метод | Маршрут | Описание |
|---|---|---|
POST |
/v1/sandbox/:id/exec |
Выполняет команду. Ответ передаётся потоком SSE (см. ниже). |
/exec конечная точка принимает тело в формате JSON:
{
"argv": ["sh", "-lc", "echo hello"],
"timeout_ms": 10000,
"cwd": "/workspace"
}Экранирование argv
Каждый элемент массива argv массив экранируется с помощью ANSI-C $'...' экранирование перед объединением в команду оболочки. Токены, содержащие только безопасные символы (A-Za-z0-9@%+=:,./-) передаются без изменений. Все остальные токены оборачиваются в $'...' с экранированными обратными слэшами, одинарными кавычками, символами новой строки, возврата каретки и табуляции. Это предотвращает shell injection и сохраняет аргументы, содержащие пробелы, кавычки или специальные символы.
Формат ответа SSE
Ответ представляет собой text/event-stream со следующими типами событий:
| Событие | Данные | Описание |
|---|---|---|
stdout |
Фрагмент в кодировке Base64 | Стандартный вывод команды. |
stderr |
Фрагмент в кодировке Base64 | Стандартный поток ошибок команды. |
exit |
{"exit_code": N} |
Команда выполнена. Событие терминала. |
error |
{"error": "…", "code": "…"} |
Команда завершилась с ошибкой. Событие терминала. |
Файловые операции
| Метод | Маршрут | Описание |
|---|---|---|
GET |
/v1/sandbox/:id/file/* |
Считайте файл. Возвращает необработанные байты (application/octet-stream). |
PUT |
/v1/sandbox/:id/file/* |
Запись файла. Тело запроса: необработанные байты. Возвращает {"ok": true}. Максимум 32 MiB. |
Путь к файлу кодируется в URL после /file/. Все пути должны находиться в пределах /workspace. Попытки обхода пути (например, ../../etc/passwd) отклоняются.
Сохранение состояния рабочей области
| Метод | Маршрут | Описание |
|---|---|---|
POST |
/v1/sandbox/:id/persist |
Сериализуйте /workspace в tar-архив. Возвращает необработанные байты tar. |
POST |
/v1/sandbox/:id/hydrate |
Заполните /workspace из tar-архива, отправленного в теле запроса. |
/persist конечная точка принимает необязательный excludes параметр запроса: список относительных путей через запятую, которые нужно исключить из архива.
/hydrate конечная точка принимает необработанные данные tar объёмом до 32 MiB.
Монтирования бакетов
| Метод | Маршрут | Описание |
|---|---|---|
POST |
/v1/sandbox/:id/mount |
Подключение S3-совместимого бакета как локального каталога. |
POST |
/v1/sandbox/:id/unmount |
Отмонтируйте ранее смонтированный bucket. |
/mount конечная точка принимает тело в формате JSON. Поддерживаются два сценария:
Монтирования R2 binding
Опустите endpoint и передайте имя привязки R2 в Worker в bucket:
{
"bucket": "MY_BUCKET",
"mountPath": "/mnt/data",
"options": {
"readOnly": false,
"prefix": "/subdir"
}
}Когда options.endpoint не указан, bucket означает имя привязки R2 в Worker.
Для явного монтирования S3-совместимой конечной точки укажите endpoint и при необходимости credentials:
{
"bucket": "my-r2-bucket",
"mountPath": "/mnt/data",
"options": {
"endpoint": "https://ACCOUNT_ID.r2.cloudflarestorage.com",
"readOnly": false,
"prefix": "/subdir",
"credentials": {
"accessKeyId": "...",
"secretAccessKey": "..."
}
}
}Когда endpoint указан, bucket означает имя удалённого бакета. Учётные данные необязательны только в этом режиме: мост определяет их автоматически из секретов Worker (R2_ACCESS_KEY_ID / R2_SECRET_ACCESS_KEY или AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY) если не указано.
Сеансы
| Метод | Маршрут | Описание |
|---|---|---|
POST |
/v1/sandbox/:id/session |
Создаёт сеанс. Возвращает {"id": "<session-id>"}. |
DELETE |
/v1/sandbox/:id/session/:sid |
Удалите сессию. Возвращает 204. |
Сессии изолируют рабочую директорию, переменные окружения и состояние выполнения команд внутри sandbox. Передайте Session-Id header в /exec, /file/*, а также /pty запросы, чтобы привязать их к сессии.
Если не указан Session-Id header, запросы используют неявный режим выполнения сандбокса. По умолчанию это сессия по умолчанию, но SDK, настроенные с enableDefaultSession: false вместо этого выполняйте такие неявные операции без сессии.
Терминал (PTY)
| Метод | Маршрут | Описание |
|---|---|---|
GET |
/v1/sandbox/:id/pty |
Переход на сеанс PTY через WebSocket. |
Параметры запроса:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
cols |
число | 80 |
Ширина терминала в столбцах. |
rows |
число | 24 |
Высота терминала в строках. |
shell |
string | , | Исполняемый файл shell (например, /bin/bash). |
session |
string | , | ID сессии для сессионного PTY. |
WebSocket передаёт двоичные кадры для ввода-вывода терминала и текстовые кадры JSON для управляющих сообщений:
| Направление | Тип кадра | Content |
|---|---|---|
| От клиента к серверу | Двоичный | Нажатия клавиш в кодировке UTF-8. |
| От сервера к клиенту | Двоичный | Вывод терминала, включая escape-последовательности ANSI. |
| От клиента к серверу | Текст (JSON) | Управляющие сообщения (например, {"type": "resize", "cols": 120, "rows": 30}). |
| От сервера к клиенту | Текст (JSON) | Статусные сообщения (ready, exit, error). |
Прогретый пул
| Метод | Маршрут | Описание |
|---|---|---|
GET |
/v1/pool/stats |
Текущая статистика пула. |
POST |
/v1/pool/prime |
Запустите цикл alarm для прогретого пула. |
POST |
/v1/pool/shutdown-prewarmed |
Остановите все простаивающие прогретые контейнеры. |
Пул прогретых контейнеров заранее запускает контейнеры песочниц, чтобы новые сеансы запускались мгновенно. Настройте его с помощью переменных окружения в wrangler.jsonc:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"vars": {
"WARM_POOL_TARGET": "3",
"WARM_POOL_REFRESH_INTERVAL": "10000"
}
}[vars]
WARM_POOL_TARGET = "3" # Number of idle containers to keep warm (0 = disabled)
WARM_POOL_REFRESH_INTERVAL = "10000" # Health-check interval in millisecondsCron-триггер (* * * * *) автоматически прогревает пул после развёртывания. Установите WARM_POOL_TARGET к "0" (значение по умолчанию), чтобы отключить пул и избежать непредвиденных расходов.
Health check
| Метод | Маршрут | Описание |
|---|---|---|
GET |
/health |
Проверка работоспособности без аутентификации. Возвращает {"ok": true}. |
Дополнительные материалы
- Обзор Bridge : Что такое bridge, его развёртывание и примеры использования.
- Справочник по API Sandbox : полный справочник по методам Sandbox SDK.
- Исходный код Bridge на GitHub ↗ : Worker, Dockerfile и схема OpenAPI.