EndoCore¶
Файловый ASGI backend-фреймворк — дерево папок является API.
Никаких роутеров, декораторов и конфигов регистрации. Положил файл в нужную папку — endpoint появился. Роутинг, версионирование и CLI — это просто операции над одним деревом каталогов.
Чистый ASGI · одна зависимость ядра (uvicorn) · безопасная ORM ·
DI · WebSockets · кэш · OpenAPI · миграции · 1600+ тестов.
Начать Туториал vs FastAPI Discord
Идея за десять секунд¶
Api/
v1/
User/
Role/
Get.py # GET /v1/user/role
Post.py # POST /v1/user/role
[id]/
Get.py # GET /v1/user/42 -> id = "42"
# Api/v1/User/Role/Get.py
from endocore import Request, Response
async def handler(request: Request) -> Response:
return Response.json({"roles": ["admin", "editor", "viewer"]})
Папка — это URL, имя файла — HTTP-метод, [id] захватывает значение, а первая
папка vN — версия API. Это вся модель роутинга.
Почему EndoCore¶
-
Файл = маршрут
Структура и есть API. Что видно в дереве — ровно то и отдаёт сервер. Ни скрытой регистрации, ни расхождения между кодом и маршрутами.
-
Безопасная ORM (SQLite + PostgreSQL)
В стиле Django, но с приоритетом безопасности: любое значение биндится драйвером, идентификаторы валидируются и квотируются, операторы — из белого списка. Готова к async.
-
Внедрение зависимостей
Depends(...)как в FastAPI плюс провайдеры уровня приложения — вложенные, кэшируются на запрос, резолвятся по типу или имени. -
Батарейки в комплекте
WebSockets + pub/sub, кэш (память/Redis), middleware CORS/CSRF/gzip/rate-limit, cookies, фоновые задачи, миграции с откатом, OpenAPI.
Немного об ORM¶
from endocore.orm import Model, fields, configure, create_all, Count
class Author(Model):
name = fields.CharField(max_length=100)
class Book(Model):
title = fields.CharField(max_length=200)
author = fields.ForeignKey(Author, related_name="books")
configure(backend="sqlite", database="app.db")
create_all(Author, Book)
Author.objects.create(name="Ada")
Book.objects.filter(author__name="Ada") # кросс-табличный lookup (JOIN)
Author.objects.annotate(n=Count("books")) # агрегат по связи
await Book.objects.aget(id=1) # async (неблокирующий)
Установка¶
Первый раз здесь? Идите по порядку:
- Установка — один
pip install. - Быстрый старт — рабочий API за минуту.
- Туториал — небольшой API блога целиком: модели, сервисы, middleware, версии, тесты.
Статус¶
EndoCore — версия 1.0: публичный API, задокументированный в
справочнике, теперь покрыт semver. Поставляется с 2300+
тестами, покрывающими роутинг, ORM (оба диалекта, тесты на инъекции), миграции,
middleware, DI, кэш и WebSockets.
Одна зависимость ядра
Ядро зависит от одного внешнего пакета: uvicorn. Резолвер,
Request/Response, middleware, CLI и ORM написаны на стандартной библиотеке.
PostgreSQL, шифрование файлов, Redis, Celery и pydantic — опциональные
extras. Подробнее — в Философии.