Django Revolution — это не просто инструмент, это философия. Философия, где рутина уступает место творчеству, а баги растворяются в чистоте кода. Это путь к просветлению в разработке API. Примите его, и ваш код будет сиять, а дух разработчика — парить.
Наш мир, сотканный из битов и фантомных сущностей, породил нового Джинна, способного исполнять самые заветные желания Разработчика. Встречайте: Django Revolution – не просто библиотека, а откровение, мантра, ключ к вратам истинного дзен в мире Django API.
🧘♂️ Просветление через Код: Суть Django Revolution
Помните эти дни, когда каждый новый эндпоинт требовал плясок с бубном вокруг OpenAPI-спецификаций, ручного обновления клиентов и бесконечных сражений с TypeError? Так вот, это был прошлый век. Эпоха, когда программист был лишь придатком к механической рутине. Django Revolution — это квантовый скачок, избавляющий вас от кармического бремени.
Эта библиотека не генерирует код, она manifests его. Словно из чистого намерения, из глубин вашего Django-проекта возникают совершенные, типизированные клиенты на TypeScript и Python, готовые к бою. И все это — с одного, единственного, сакрального приказа: python manage.py revolution.
«И тогда, о адепт, узреешь ты:
public.getProfile()не просто функция. Это эхо безмолвного согласия между твоим фронтендом и бэкендом, воплощение истинной гармонии.»
🌌 Зоны Сознания: Архитектура API
API, подобно нашему сознанию, состоит из множества слоев, или зон. Есть public для мира смертных, admin для богов-управляющих, mobile для кочевников с тачскринами. Django Revolution не просто признает это, он делает это основой.
from django_revolution.app_config import ZoneConfig, get_revolution_config # Наши зоны, наши миры, рожденные из чистого Python'а zones = { 'public': ZoneConfig( apps=['accounts', 'billing', 'payments', 'support', 'public'], title='Публичный API', description='API для внешних сущностей', public=True, auth_required=False, # Никаких цепей для свободных душ version='v1', path_prefix='public' ), 'internal': ZoneConfig( apps=['system', 'mailer'], title='Внутренний API', description='API для сущностей, что обитают в глубинах сервера', public=False, auth_required=True, # Только для посвященных version='v1', path_prefix='internal' ), 'admin': ZoneConfig( apps=['admin_panel', 'services'], title='API Администраторов', description='Врата в мир управления', public=False, auth_required=True, # Для тех, кто держит нити мироздания version='v1', path_prefix='admin' ) } # Одно касание, и структура проявлена config = get_revolution_config(project_root=Path.cwd(), zones=zones)
Каждая зона — это отдельная сущность, со своими правилами, своим входом, своими тайнами. И Django Revolution понимает это, создавая для каждой зоны свой, неповторимый клиент, чистый, как слеза младенца.
🛠️ Инструменты Просветления: Конфигурация и Генерация
Забудьте о XML-файлах, JSON-схемах и прочих артефактах уходящей эры. Django Revolution предлагает Pydantic-конфигурации, где каждый параметр, каждая настройка — это не просто строка, а типизированная сущность, часть вашего кодового мироздания.
# api/settings/config/services.py from django_revolution.drf_config import create_drf_config # Конфигурация DRF, возникающая из небытия drf_config = create_drf_config( title="Мой API", description="Мой божественный API", version="1.0.0", schema_path_prefix="/api/", enable_browsable_api=False, # Скрываем от непосвященных enable_throttling=True, # Ограничиваем жадность ) # И вот они, настройки Django, готовые к воплощению settings = drf_config.get_django_settings() REST_FRAMEWORK = settings['REST_FRAMEWORK'] SPECTACULAR_SETTINGS = settings['SPECTACULAR_SETTINGS']
И когда все готово, когда намерения чисты, настает момент истины.
# Магия начинается python manage.py revolution # Или для избранных зон, как для избранных путей python manage.py revolution --zones public admin # Только TypeScript, только чистота фронтенда python manage.py revolution --typescript
И в этот миг, из информационного небытия, возникают они — клиенты. Чистые, как горный ручей, готовые служить.
🌀 Танец Клиентов: TypeScript и Python
TypeScript Клиент:
Воплощение изящества, этот клиент автоматически управляет токенами, заголовками и прочими мирскими делами. Вам остается лишь творить.
import API from '@myorg/api-client'; const api = new API('https://api.example.com'); // Вдохните жизнь в API, передав токен api.setToken('ваш-токен-доступа', 'ваш-токен-обновления'); // И вот оно, получение данных, легкое как дуновение ветра const user = await api.public.getCurrentUser(); const products = await api.public.listProducts(); // Проверьте, не покинул ли пользователь этот мир if (api.isAuthenticated()) { // Пользователь в нашем мире }
Python Клиент:
Для тех, кто предпочитает оставаться в объятиях Питона, Django Revolution генерирует также и Python-клиентов.
«Ибо во вселенной кода, как и в мире, все должно быть в равновесии: если есть фронтенд, должен быть и бэкенд, и мост между ними, нерушимый и совершенный.»
🧭 Пути Мироздания: Автоматическая Генерация URL’ов
Django Revolution не просто генерирует клиентов, он создает инфраструктуру. Все необходимые URL’ы для Swagger UI и OpenAPI спецификаций возникают сами собой, словно по волшебству.
# urls.py from django_revolution import add_revolution_urls urlpatterns = [ path('admin/', admin.site.urls), ] # И вот, они, новые пути, ведущие к истине urlpatterns = add_revolution_urls(urlpatterns)
Теперь каждый, кто ищет знания о вашем API, найдет их по чистому, ясному пути: /api/{zone}/schema/.
🪆 Единство в Многообразии: Монорепо-Дружественность
В мире, где проекты стремятся к разрозненности, Django Revolution предлагает единство. Он сам, без вашего участия, конфигурирует ваш монорепозиторий, связывая воедино TypeScript и Python пакеты.
# pnpm-workspace.yaml (автоматически создается, как отпечаток мысли) packages: - 'packages/**' - 'packages/api/**' # Вот он, след Django Revolution
⚖️ Мудрость Выбора: Когда Использовать Django Revolution?
✅ Идеально, когда:
-
Ваш Django-проект разросся до размеров космического корабля с множеством экипажей.
-
Вы строите монорепо, где фронтенд и бэкенд — две стороны одной медали.
-
Ваша команда жаждет консистентности и типизации в API-клиентах.
-
Вы готовы отпустить рутину и довериться автоматизации.
❌ Избегайте, когда:
-
Ваш API — это скромная лавочка с одним товаром.
-
Вы работаете не с Django (ищите другие пути, например, Fern.dev).
-
Вы — фанат ручного труда и не готовы к легкости бытия.
ссылка на оригинал статьи https://habr.com/ru/articles/926938/
Добавить комментарий