Datastar предлагает вернуть состояние туда, где ему спокойнее
Если у вас в веб-приложении половина боли начинается со слов «а теперь синхронизируем frontend state с backend state», The Tao of Datastar стоит открыть хотя бы ради контраста.
Идея простая, но не всем приятная: backend остаётся source of truth, фронт получает HTML-patches и signals, а долгие обновления идут через SSE. Даже оптимистичные апдейты авторы советуют не тащить по привычке, а показывать честный loading до подтверждения сервера.
Я бы не воспринимал это как религию против SPA. Скорее как хороший чек для себя: сколько клиентского состояния вы держите только потому, что фреймворк сделал это самым очевидным путём?
Если у вас в веб-приложении половина боли начинается со слов «а теперь синхронизируем frontend state с backend state», The Tao of Datastar стоит открыть хотя бы ради контраста.
Идея простая, но не всем приятная: backend остаётся source of truth, фронт получает HTML-patches и signals, а долгие обновления идут через SSE. Даже оптимистичные апдейты авторы советуют не тащить по привычке, а показывать честный loading до подтверждения сервера.
Я бы не воспринимал это как религию против SPA. Скорее как хороший чек для себя: сколько клиентского состояния вы держите только потому, что фреймворк сделал это самым очевидным путём?
❤3👍1
Forwarded from Представляешь,
Chrome решил, что старые блокировщики вам больше не нужны
Классический uBlock Origin в Chrome проработает до конца июня. Chrome 150 уберёт обходной флаг, в июле Chrome 151 добьёт остатки поддержки Manifest V2, старой платформы расширений. Старые блокировщики не запустятся.
Google объясняет это сложностью, техническим долгом и рисками для безопасности. Честный перевод — фильтрует слишком хорошо. Останутся uBlock Origin Lite и AdGuard на Manifest V3, новой платформе расширений, но с жёстким лимитом правил: реклама может прорываться, фильтры могут обновляться реже.
Нужен чистый трафик? План Б. Можно перейти на Firefox или другой браузер с поддержкой MV2. На Tproger.
Классический uBlock Origin в Chrome проработает до конца июня. Chrome 150 уберёт обходной флаг, в июле Chrome 151 добьёт остатки поддержки Manifest V2, старой платформы расширений. Старые блокировщики не запустятся.
Google объясняет это сложностью, техническим долгом и рисками для безопасности. Честный перевод — фильтрует слишком хорошо. Останутся uBlock Origin Lite и AdGuard на Manifest V3, новой платформе расширений, но с жёстким лимитом правил: реклама может прорываться, фильтры могут обновляться реже.
Нужен чистый трафик? План Б. Можно перейти на Firefox или другой браузер с поддержкой MV2. На Tproger.
❤4🔥3
Почему 3D View Transition внезапно выглядит плоским
View Transition API легко продаётся красивыми демками: одна страница превращается в другую, карточки перелетают, всё плавно. А потом добавляете 3D-transform, и эффект почему-то схлопывается в обычную плоскую анимацию.
На CSS-Tricks разобрали типичную ловушку: браузер создаёт отдельное дерево псевдоэлементов для перехода, и 3D-контекст там ведёт себя не так, как в исходной DOM-структуре. Приходится понимать
Полезный текст, если вы уже пробовали View Transitions, но столкнулись с проблемами.
View Transition API легко продаётся красивыми демками: одна страница превращается в другую, карточки перелетают, всё плавно. А потом добавляете 3D-transform, и эффект почему-то схлопывается в обычную плоскую анимацию.
На CSS-Tricks разобрали типичную ловушку: браузер создаёт отдельное дерево псевдоэлементов для перехода, и 3D-контекст там ведёт себя не так, как в исходной DOM-структуре. Приходится понимать
::view-transition-*, transform-style, stacking context и то, где именно теряется глубина.Полезный текст, если вы уже пробовали View Transitions, но столкнулись с проблемами.
❤2
PWA теперь можно перевезти на новый адрес без ручной переустановки
Установленные PWA долго были жёстко привязаны к origin. Поменяли домен, путь или архитектуру — и пользователь фактически оставался со старым приложением, которое нельзя аккуратно перевезти на новый адрес.
Chrome 150 добавляет PWA Origin Migration. Новое приложение объявляет
Установленные PWA долго были жёстко привязаны к origin. Поменяли домен, путь или архитектуру — и пользователь фактически оставался со старым приложением, которое нельзя аккуратно перевезти на новый адрес.
Chrome 150 добавляет PWA Origin Migration. Новое приложение объявляет
migrate_from в manifest, старый origin подтверждает миграцию через .well-known/web-app-origin-association, а пользователь получает update-like диалог вместо ручного удаления и новой установки.❤6
Кастомный select наконец становится настоящим select, а не div-театром в Safari
WebKit разобрал главное правило customizable select: кастомизировать можно, но нельзя ломать смысл option.
Теперь можно менять оформление, добавлять richer UI, пользоваться новым поведением Safari 27, но текстовая сущность option всё ещё должна оставаться понятной браузеру и ассистивным технологиям.
Хорошее чтение для всех, кто хоть раз собирал свой dropdown и потом внезапно получал проблемы с клавиатурой, screen reader или формами.
WebKit разобрал главное правило customizable select: кастомизировать можно, но нельзя ломать смысл option.
Теперь можно менять оформление, добавлять richer UI, пользоваться новым поведением Safari 27, но текстовая сущность option всё ещё должна оставаться понятной браузеру и ассистивным технологиям.
Хорошее чтение для всех, кто хоть раз собирал свой dropdown и потом внезапно получал проблемы с клавиатурой, screen reader или формами.
👍5❤2
CSS может получать живые данные со страницы без большого фреймворка
Prop For That — маленькая JS-библиотека, которая прокидывает в CSS custom properties значения вроде позиции мыши, scroll velocity, viewport, visibility или значения input.
Смысл не в том, что теперь надо всё писать атрибутами. Интереснее другое: часть интерактива можно оставить в CSS, а JS использовать как тонкий слой данных. Получается удобный формат для hover-эффектов, реакций на скролл, микровзаимодействий и прототипов.
Сохраняем для случаев, когда React-компонент ради одного CSS-параметра выглядит перебором.
Prop For That — маленькая JS-библиотека, которая прокидывает в CSS custom properties значения вроде позиции мыши, scroll velocity, viewport, visibility или значения input.
Смысл не в том, что теперь надо всё писать атрибутами. Интереснее другое: часть интерактива можно оставить в CSS, а JS использовать как тонкий слой данных. Получается удобный формат для hover-эффектов, реакций на скролл, микровзаимодействий и прототипов.
Сохраняем для случаев, когда React-компонент ради одного CSS-параметра выглядит перебором.
nerdy.dev
Prop For That
Everything JS knows, now CSS knows.
❤6
Как мы проскочили путь от первого iPhone и сложной разработки под мобильные устройства до эпохи ИИ? Что случилось и к чему это привело — в третьей части цикла об истории российского IT.
Мобильный бум застал индустрию врасплох: было непонятно, как адаптировать сайты под маленькие экраны и что делать со слабой связью. Решением стали нативные приложения — их начали разрабатывать многие компании. Так мы пришли к эпохе супераппов, где собрано всё и сразу.
Приложений, проектов и стартапов становилось больше — начался расцвет российского IT. Но разработчиков не хватало, и на сцену вышли курсы, школы и онлайн-уроки. Желающих войти в профессию оказалось огромное количество, и рынок быстро перегрелся. Теперь новичков заменяет ИИ, а найти работу — задача со звёздочкой. Сегодня гонка за лучшими программистами превратилась в гонку ИИ-инфраструктур.
Так решения порождали новые проблемы, а российская IT-индустрия вышла на новый уровень сложности. Подробнее — в материале на Tproger.
Мобильный бум застал индустрию врасплох: было непонятно, как адаптировать сайты под маленькие экраны и что делать со слабой связью. Решением стали нативные приложения — их начали разрабатывать многие компании. Так мы пришли к эпохе супераппов, где собрано всё и сразу.
Приложений, проектов и стартапов становилось больше — начался расцвет российского IT. Но разработчиков не хватало, и на сцену вышли курсы, школы и онлайн-уроки. Желающих войти в профессию оказалось огромное количество, и рынок быстро перегрелся. Теперь новичков заменяет ИИ, а найти работу — задача со звёздочкой. Сегодня гонка за лучшими программистами превратилась в гонку ИИ-инфраструктур.
Так решения порождали новые проблемы, а российская IT-индустрия вышла на новый уровень сложности. Подробнее — в материале на Tproger.
❤1👍1
Если вы фронтендер и вам нужен бэкенд, этот разбор стоит сохранить
Автор собрал учебный Task Manager API на FastAPI так, чтобы за один проект пройти структуру, SQLAlchemy-модели, Pydantic-схемы, отдельный
Сохранил бы тем, кто переходит от учебных скриптов к полноценному API и хочет разложить файлы по полочкам. Разбор с кодом на GitHub.
#restapi #фронтенд #бэкенд
Автор собрал учебный Task Manager API на FastAPI так, чтобы за один проект пройти структуру, SQLAlchemy-модели, Pydantic-схемы, отдельный
crud.py и маршруты через APIRouter. Получается 10 эндпоинтов для пользователей и задач — узнаваемая схема сервиса, а не игрушка.Сохранил бы тем, кто переходит от учебных скриптов к полноценному API и хочет разложить файлы по полочкам. Разбор с кодом на GitHub.
#restapi #фронтенд #бэкенд
👍6❤2👎1
Datasette Apps: HTML-приложения внутри инструмента для публикации SQLite
Datasette — это опенсорсный инструмент, который выставляет SQLite-базы как веб-интерфейс: таблицы, SQL-запросы, JSON API и плагины. Для веб-разработчика это способ быстро дать данным лицо или собрать внутреннюю админку без полноценного бэкенда.
Теперь в нём появился плагин
Я бы сохранил для прототипов и внутренних админок: вместо связки бэкенд+фронтенд получается самодостаточный блок, который сразу работает с SQLite. Потрогать можно на agent.datasette.io.
Datasette — это опенсорсный инструмент, который выставляет SQLite-базы как веб-интерфейс: таблицы, SQL-запросы, JSON API и плагины. Для веб-разработчика это способ быстро дать данным лицо или собрать внутреннюю админку без полноценного бэкенда.
Теперь в нём появился плагин
datasette-apps: HTML+JS-приложения, которые живут внутри Datasette и читают SQL прямо из браузера. Песочница жёсткая — iframe без cookies и localStorage, плюс CSP блокирует внешние запросы. Как пишет Саймон Уиллисон, даже если приложение сломают, приватные данные не уйдут со страницы. Запись возможна только через заранее сохранённые SQL-запросы.Я бы сохранил для прототипов и внутренних админок: вместо связки бэкенд+фронтенд получается самодостаточный блок, который сразу работает с SQLite. Потрогать можно на agent.datasette.io.
❤2
Авторитетный и рекурсивный DNS: зачем фронтендеру это знать
Если вы меняли хостинг или прикручивали CDN, то видели, как новые записи встают не сразу — кто-то уже попадает на новый сервер, а кто-то ещё стучится в старый. Виноват не фреймворк, а разница между двумя ролями DNS.
Авторитетный сервер считается источником правды для вашего домена: именно он отвечает за его DNS-записи. Рекурсивный резолвер выступает посредником: ходит от корня к TLD, затем к авторитетному серверу и кеширует ответ на своей стороне. Именно кеш резолверов, а не «где-то там в интернете», создаёт задержку при propagation.
Понимание этой разницы помогает быстрее диагностировать, почему одни пользователи видят новую версию сайта, а другие продолжают видеть старую. Разбор от DNS Assistant стоит сохранить, если редактируете зоны.
Если вы меняли хостинг или прикручивали CDN, то видели, как новые записи встают не сразу — кто-то уже попадает на новый сервер, а кто-то ещё стучится в старый. Виноват не фреймворк, а разница между двумя ролями DNS.
Авторитетный сервер считается источником правды для вашего домена: именно он отвечает за его DNS-записи. Рекурсивный резолвер выступает посредником: ходит от корня к TLD, затем к авторитетному серверу и кеширует ответ на своей стороне. Именно кеш резолверов, а не «где-то там в интернете», создаёт задержку при propagation.
Понимание этой разницы помогает быстрее диагностировать, почему одни пользователи видят новую версию сайта, а другие продолжают видеть старую. Разбор от DNS Assistant стоит сохранить, если редактируете зоны.
❤4
Forwarded from Точка входа в программирование
Почему
Кажется, что добавить
Так «асинхронность» расползается по коду заразно: вдруг половина проекта завёрнута в Promise, хотя реальной работы с сетью или файлами там нет. Читать такой код сложнее — непонятно, где настоящее ожидание ответа от сервера, а где просто возврат готовой переменной.
Правило проще, чем кажется: если внутри функции нет
async без await — плохая привычкаКажется, что добавить
async к функции «на всякий случай» безопасно. На деле вы меняете правила работы функции: она начинает возвращать не готовое значение, а Promise. Теперь каждый, кто её вызывает, обязан писать await, а значит, и его вызывающие тоже становятся async-функциями.Так «асинхронность» расползается по коду заразно: вдруг половина проекта завёрнута в Promise, хотя реальной работы с сетью или файлами там нет. Читать такой код сложнее — непонятно, где настоящее ожидание ответа от сервера, а где просто возврат готовой переменной.
Правило проще, чем кажется: если внутри функции нет
await, не пишите перед ней async. Добавите потом за минуту, когда это реально понадобится. Разбор Мэтта Смита поможет почувствовать разницу.😁10🤯1
Forwarded from Точка входа в программирование
Почему код иногда ведёт себя странно: учимся думать как JS-движок
Когда вы только начинаете учить JavaScript, легко запомнить синтаксис и повторять за примерами. Но иногда код ведёт себя не так, как ожидается, и без понимания, как движок выполняет инструкции, разобраться трудно.
Сумит Саха на freeCodeCamp разбирает, как устроен JavaScript изнутри: область видимости переменных, замыкания, события и асинхронность. Не просто синтаксис, а то, что происходит за кулисами.
Начните с простого эксперимента: объявите переменную снаружи функции и ещё одну — внутри. Функция увидит внешнюю, а вот извне внутреннюю не прочитать. Посмотрите на ошибку: так область видимости перестаёт быть абстракцией.
Когда вы только начинаете учить JavaScript, легко запомнить синтаксис и повторять за примерами. Но иногда код ведёт себя не так, как ожидается, и без понимания, как движок выполняет инструкции, разобраться трудно.
Сумит Саха на freeCodeCamp разбирает, как устроен JavaScript изнутри: область видимости переменных, замыкания, события и асинхронность. Не просто синтаксис, а то, что происходит за кулисами.
Начните с простого эксперимента: объявите переменную снаружи функции и ещё одну — внутри. Функция увидит внешнюю, а вот извне внутреннюю не прочитать. Посмотрите на ошибку: так область видимости перестаёт быть абстракцией.
❤2
dc.send(file) не существует: что на самом деле нужно для передачи файла в браузере
Код из туториала по WebRTC-файлообмену выглядит убедительно: чанки в цикле, метка
Автор собрал шесть таких ловушек: объект
Код из туториала по WebRTC-файлообмену выглядит убедительно: чанки в цикле, метка
transfer_done в конце. Я бы не тащил такое в прод. dc.send() кладёт данные в SCTP-буфер, но не гарантирует их уход в сеть. На медленном relay прогресс может показать 100%, а файл на диске получателя окажется обрезан.Автор собрал шесть таких ловушек: объект
File не переживёт refresh, получатель может не быть готов к записи, а peer_left иногда — штатное завершение, а не ошибка. Разобрал здесь, если делаете P2P-передачу в браузере, советую проверить, где вы пишете свою надёжность поверх DataChannel.❤2
Forwarded from Точка входа в программирование
Fetch API в JavaScript: как браузер просит данные у сервера
Когда вы учите JS, наступает момент, когда хочется не просто менять страницу, а получать реальные данные и обрабатывать их. Fetch API — это встроенный способ браузера (и Node.js 18+) отправить сетевой запрос и получить ответ.
Главная ловушка для новичка:
Чтобы закрепить, откройте консоль браузера, сделайте простой запрос на получение данных к любому открытому API и выведите результат. Подробнее — в туториале DigitalOcean.
Когда вы учите JS, наступает момент, когда хочется не просто менять страницу, а получать реальные данные и обрабатывать их. Fetch API — это встроенный способ браузера (и Node.js 18+) отправить сетевой запрос и получить ответ.
Главная ловушка для новичка:
fetch() не считает ошибку 404 или 500 настоящей ошибкой. Запрос всё равно выполнится, и его нужно проверять через response.ok или response.status. Иначе программа молча проглотит битый ответ.Чтобы закрепить, откройте консоль браузера, сделайте простой запрос на получение данных к любому открытому API и выведите результат. Подробнее — в туториале DigitalOcean.
Digitalocean
How to Use the JavaScript Fetch API | DigitalOcean
Learn the JavaScript Fetch API for GET and POST requests with error handling, async/await, AbortController, and tested examples.
❤1👍1
В npm снова нашли малварь под видом PostCSS-плагинов
Исследователи из JFrog обнаружили три вредоносных пакета, которые маскируются под знакомые инструменты веб-разработки. Самый заметный — postcss-minify-selector-parser с 615 загрузками; ещё postcss-minify-selector (256) и aes-decode-runner-pro (145). Все трое опираются на легитимный postcss-selector-parser, чтобы выглядеть правдоподобно, но при установке разворачивают Windows-RAT (remote access trojan) через PowerShell и Python.
Цепочка простая: JS-дроппер пишет settings.ps1, который качает ZIP с nvidiadriver[.]net и запускает update.vbs. Внутри — Python-рантайм, загрузчик loader.py и нативные модули, которые крадут пароли Chrome, собирают данные хоста и отправляют их на командный сервер. Я бы лично проверил package-lock.json на эти имена, особенно если CI ставит зависимости без ручного аудита.
Исследователи из JFrog обнаружили три вредоносных пакета, которые маскируются под знакомые инструменты веб-разработки. Самый заметный — postcss-minify-selector-parser с 615 загрузками; ещё postcss-minify-selector (256) и aes-decode-runner-pro (145). Все трое опираются на легитимный postcss-selector-parser, чтобы выглядеть правдоподобно, но при установке разворачивают Windows-RAT (remote access trojan) через PowerShell и Python.
Цепочка простая: JS-дроппер пишет settings.ps1, который качает ZIP с nvidiadriver[.]net и запускает update.vbs. Внутри — Python-рантайм, загрузчик loader.py и нативные модули, которые крадут пароли Chrome, собирают данные хоста и отправляют их на командный сервер. Я бы лично проверил package-lock.json на эти имена, особенно если CI ставит зависимости без ручного аудита.
❤5🔥4
Почему CSS @function ведёт себя как замыкание в JS
Если вы проектируете компоненты или библиотеки,
Обычно
Я бы сохранил паттерн для дизайн-систем: задаёте
Если вы проектируете компоненты или библиотеки,
@function может упростить API: кастомная CSS-функция видит переменные не только там, где определена, но и в точке вызова. Это похоже на замыкание — переменные из контекста вызова становятся доступны внутри функции.Обычно
--var наследуется вниз по DOM, а @function ломает эту привычку: при вызове она получает доступ ко всем переменным текущего контекста. В статье разбирают, как использовать это для тем, размеров и палитр без лишних аргументов.Я бы сохранил паттерн для дизайн-систем: задаёте
--theme и --size-1 на корне, а функция сама подхватывает их там, где вызвана. Меньше дублирования и меньше шанса забыть пробросить значение в параметры.👍2❤1
Forwarded from Точка входа в программирование
HTML научат обновлять часть страницы без JavaScript
Если вы учите веб-разработку, полезно понимать, как браузер получает страницу кусками. Сервер может сначала отправить шапку, потом боковое меню, а потом основной текст. Но если один блок тормозит на сервере, всё остальное ждёт его в очереди.
Сейчас это обходят фреймворки и библиотеки вроде HTMX с помощью JavaScript. Предложение в Chrome добавляет в сам HTML маркеры-заполнители: сервер сначала говорит «сюда потом придёт контент», а когда он готов, браузер подставляет его в нужное место — без скриптов.
Это не готово для настоящих сайтов, но помогает понять потоковую загрузку и частичные обновления изнутри. Разбор с примерами синтаксиса: откройте статью и найдите маркер-заполнитель — увидите, как HTML делится на «сейчас» и «потом».
Если вы учите веб-разработку, полезно понимать, как браузер получает страницу кусками. Сервер может сначала отправить шапку, потом боковое меню, а потом основной текст. Но если один блок тормозит на сервере, всё остальное ждёт его в очереди.
Сейчас это обходят фреймворки и библиотеки вроде HTMX с помощью JavaScript. Предложение в Chrome добавляет в сам HTML маркеры-заполнители: сервер сначала говорит «сюда потом придёт контент», а когда он готов, браузер подставляет его в нужное место — без скриптов.
Это не готово для настоящих сайтов, но помогает понять потоковую загрузку и частичные обновления изнутри. Разбор с примерами синтаксиса: откройте статью и найдите маркер-заполнитель — увидите, как HTML делится на «сейчас» и «потом».
👍3❤2
Как в Cloudflare шесть недель ловили баг в HTTP-библиотеке hyper
Если вы пишете веб-сервисы на Rust, я бы сохранил этот разбор. Команда Cloudflare Images перешла на прямое локальное соединение через Unix-сокеты, и большие изображения стали иногда возвращаться обрезанными: HTTP 200, но тело короче Content-Length. В логах тишина.
Причина оказалась в hyper. Цикл
Если вы пишете веб-сервисы на Rust, я бы сохранил этот разбор. Команда Cloudflare Images перешла на прямое локальное соединение через Unix-сокеты, и большие изображения стали иногда возвращаться обрезанными: HTTP 200, но тело короче Content-Length. В логах тишина.
Причина оказалась в hyper. Цикл
poll_loop отбрасывал результат poll_flush, даже когда тот возвращал Poll::Pending. Баг существовал в версиях 0.14.x, 1.7 и 1.8, но прежний посредник читал данные быстро, и он не проявлялся. Cloudflare исправили его за четыре строки кода: flush теперь выполняется перед shutdown.🔥3❤1
Как выбрать системного интегратора в 2026 году?
Выбор подрядчика — решение на несколько лет. Цена ошибки — суды или переписывание проекта с нуля. Не ошибиться всё-таки можно, если воспользоваться небольшим чек-листом для выбора подрядчика.
Например, не стоит сразу начинать долгосрочное сотрудничество, а проверить нового партнёра на небольшой задаче. Внимательно смотрите на сметы, обращайте внимание на прозрачность и качество коммуникаций, и не забудьте свериться с репутацией интегратора на рынке.
Всего критериев 12, обо всех подробно читайте в новом материале.
Выбор подрядчика — решение на несколько лет. Цена ошибки — суды или переписывание проекта с нуля. Не ошибиться всё-таки можно, если воспользоваться небольшим чек-листом для выбора подрядчика.
Например, не стоит сразу начинать долгосрочное сотрудничество, а проверить нового партнёра на небольшой задаче. Внимательно смотрите на сметы, обращайте внимание на прозрачность и качество коммуникаций, и не забудьте свериться с репутацией интегратора на рынке.
Всего критериев 12, обо всех подробно читайте в новом материале.
❤2👍1
Deno соберёт веб-приложение в десктоп
Если вам надоели тяжеловесные Electron-обёртки, Deno предлагает альтернативу. В мажорном релизе Deno добавит команды для сборки десктопа из TypeScript, Next.js, Astro, Fresh, TanStack Start или Vite SSR. Я бы сохранил: переносим веб-приложение в окно почти без лишних движений.
Главный поворот — нативный WebView вместо встроенного Chromium (CEF). Приложение на WebView в macOS весит около 68,5 МБ, а на CEF выходит 308,9 МБ и стартует медленнее. Меню, диалоги и уведомления уже есть, а вот диалог выбора файла и API буфера обмена пока нет, мобильную версию обещают позже.
В прод я бы это пока не нёс: нестабильно, и WebView на старых машинах может вести себя непредсказуемо. Но за развитием стоит следить.
Если вам надоели тяжеловесные Electron-обёртки, Deno предлагает альтернативу. В мажорном релизе Deno добавит команды для сборки десктопа из TypeScript, Next.js, Astro, Fresh, TanStack Start или Vite SSR. Я бы сохранил: переносим веб-приложение в окно почти без лишних движений.
Главный поворот — нативный WebView вместо встроенного Chromium (CEF). Приложение на WebView в macOS весит около 68,5 МБ, а на CEF выходит 308,9 МБ и стартует медленнее. Меню, диалоги и уведомления уже есть, а вот диалог выбора файла и API буфера обмена пока нет, мобильную версию обещают позже.
В прод я бы это пока не нёс: нестабильно, и WebView на старых машинах может вести себя непредсказуемо. Но за развитием стоит следить.
🔥4❤2
Conduit: API-шлюз с TypeScript-плагинами вместо redeploy
Если gateway на Go разрастается лапшой из префиксов, правка auth ведёт к новому деплою. Автор Conduit вынес эту боль в отдельный слой: Go занимается routing, proxying, CORS и SSRF-защитой, а логика авторизации, логирования и правил маршрутизации живёт в sandboxed Deno runtime как TypeScript-плагины.
Go и Deno общаются через Unix-сокет со strict snapshot-and-patch протоколом. Меняете файл плагина, сохраняете, и gateway не пересобирается. На хосте уживаются разные схемы доверия: HMAC-сессии для user/chat и JWT для admin с X-Gateway-Admin-заголовками.
Я бы сохранил: такое разделение редко даётся с первой итерации, а здесь оно разобрано на живом коде. Подробности и спорные решения пригодятся, если проектируете свою входную точку.
Если gateway на Go разрастается лапшой из префиксов, правка auth ведёт к новому деплою. Автор Conduit вынес эту боль в отдельный слой: Go занимается routing, proxying, CORS и SSRF-защитой, а логика авторизации, логирования и правил маршрутизации живёт в sandboxed Deno runtime как TypeScript-плагины.
Go и Deno общаются через Unix-сокет со strict snapshot-and-patch протоколом. Меняете файл плагина, сохраняете, и gateway не пересобирается. На хосте уживаются разные схемы доверия: HMAC-сессии для user/chat и JWT для admin с X-Gateway-Admin-заголовками.
Я бы сохранил: такое разделение редко даётся с первой итерации, а здесь оно разобрано на живом коде. Подробности и спорные решения пригодятся, если проектируете свою входную точку.
🤔3