Files
sless/doc/api/design.md
T
“Naeel” dc7542148e docs: обновить всю документацию по результатам сессии 2026-03-07
- infrastructure/overview.md: исправить S3 URL, Container Registry (DockerHub),
  namespace sless, Terraform Registry terra.k8c.ru
- errors/log.md: добавить 3 ошибки — kaniko S3 scheme, бесконечный цикл сборки,
  docker credStore desktop.exe
- decisions/log.md: добавить решения — DockerHub, terraform провайдер в той же
  репе, WaitReady паттерн, code_hash для версионирования кода
- api/design.md: обновить базовый URL, добавить upload endpoint с описанием
  процесса, исправить runtime список
2026-03-07 10:26:13 +04:00

3.5 KiB

API Design

Базовый URL

http://<operator-host>:9090/v1

Локально: http://localhost:9090/v1 В кластере (будущее): http://sless-operator.sless.svc.cluster.local:9090/v1

Реализовано (текущий namespace-aware формат):

/v1/namespaces/{namespace}/functions[/{name}]
/v1/namespaces/{namespace}/functions/{name}/upload
/v1/namespaces/{namespace}/triggers[/{name}]
/v1/namespaces/{namespace}/functions/{name}/invocations

Аутентификация

Authorization: Bearer <cloud-token>

Ресурсы

Functions

Метод Путь Описание
GET /functions Список функций
POST /functions Создать функцию
GET /functions/{id} Получить функцию
PUT /functions/{id} Обновить функцию
DELETE /functions/{id} Удалить функцию

Versions (код функции)

Метод Путь Описание
GET /functions/{id}/versions Список версий
POST /functions/{id}/versions Загрузить новый код (multipart zip)
GET /functions/{id}/versions/{ver} Получить версию
POST /functions/{id}/versions/{ver}/activate Активировать версию

Triggers

Метод Путь Описание
GET /functions/{id}/triggers Список триггеров
POST /functions/{id}/triggers Создать триггер (HTTP/Cron)
DELETE /functions/{id}/triggers/{tid} Удалить триггер

Invocations (вызов и логи)

Метод Путь Описание
POST /functions/{id}/invoke Синхронный вызов
GET /functions/{id}/invocations История вызовов
GET /functions/{id}/invocations/{iid} Детали вызова + логи

Upload endpoint

POST /v1/namespaces/{namespace}/functions/{name}/upload
Content-Type: multipart/form-data
Authorization: Bearer <token>

field: code = <zip-file>

Процесс:

  1. Принимает zip (max 32MB)
  2. Распаковывает zip
  3. Генерирует Dockerfile (FROM naeel/sless-runtime-{runtime}:latest\nCOPY . /app/function/)
  4. Перепаковывает в tar.gz (kaniko требует tar format)
  5. Загружает в S3: contexts/{ns}/{name}/{timestamp}.tar.gz
  6. Обновляет fn.Spec.S3Key → контроллер видит изменение и запускает kaniko Job

Ответ 200 OK:

{"message": "build queued", "phase": "Pending", "s3_key": "contexts/..."}

Поддерживаемые runtime (v1)

  • python3.11 — реализован и протестирован
  • go1.21 — планируется
  • nodejs20 — планируется

Модель Function

{
  "id": "fn-uuid",
  "name": "my-function",
  "description": "...",
  "runtime": "python3.11",
  "entrypoint": "handler.handle",
  "memory_mb": 128,
  "timeout_sec": 30,
  "env_vars": {"KEY": "value"},
  "active_version": "1",
  "status": "active",
  "created_at": "...",
  "updated_at": "..."
}

Модель Trigger

{
  "id": "tr-uuid",
  "type": "http",
  "url": "https://sless.api.ngcloud.ru/invoke/fn-uuid",
  "created_at": "..."
}
{
  "id": "tr-uuid",
  "type": "cron",
  "schedule": "0 * * * *",
  "created_at": "..."
}