Взгляните на наш новейший инструмент с открытым исходным кодом для программистов
Hyperstack — это новый веб-фреймворк Node.js с открытым исходным кодом для разработчиков. Это не изобретение велосипеда, это просто упаковка множества отличных колес и хороших частей для использования — в один хороший пакет, похожий на Rails.
Хорошее программное обеспечение — это простое программное обеспечение, которое решает сложные проблемы. Создание простого программного обеспечения обычно требует следования некоторым принципам, шаблонам проектирования и твердым убеждениям, которые помогают нам преодолевать опасности парадокса выбора.
Когда у вас нет этих принципов и передовых практик для обеспечения простоты, я видел, как инженеры ради удовольствия пинали шины с помощью самой популярной в этом году платформы API микросервисов, и, прежде чем вы это узнаете, они уже ушли глубоко в создание микросервисной архитектуры для до боли простое веб-приложение. «Вот как мы должны это делать, вот как создавать масштабируемое программное обеспечение», думали они.
Для многих становится легко создавать сложное программное обеспечение и трудно начать что-то простое.
Решение простых задач с помощью простого программного обеспечения
Одно приложение с единой реляционной базой данных десятилетиями идеально подходило для создания отличного программного обеспечения и по-прежнему отлично подходит для того, чтобы начать с правильной ноги и создавать простое программное обеспечение для проектов, которые интересно создавать.
Ruby on Rails позволил именно это. Вы строите величественный монолит, который решает простые и сложные проблемы до тех пор, пока вы не сможете больше.
Только тогда, когда вы будете умнее во всем, когда у вас будут разобраны все варианты использования с кучами данных и опыта — тогда вы начнете разделять и создавать микросервисы .
Этот подход работал для: GitHub, Airbnb, Twitter. Все они начинались как монолит. Некоторые из них до сих пор представляют собой величественный монолит: Gitlab. Большинство из них до сих пор используют Ruby on Rails.
TypeScript против Ruby в мире Rails
Rails, пожалуй, лучший веб-фреймворк из когда-либо созданных, а Ruby — это язык программирования, который вы должны использовать для создания приложений Rails. Скорее всего, это повлияло на все, к чему вы сегодня прикасаетесь в программном обеспечении в Интернете, знаете ли вы об этом или нет.
Хотя вы по-прежнему можете использовать Rails, вы можете предпочесть использовать Typescript и Node.js, а не Ruby.
Есть много причин предпочесть Typescript и Node.js для серверной разработки вместо Ruby:
- Предыдущий опыт для отдельных лиц или команды или предыдущая кодовая база, которую вы пытаетесь модернизировать.
- Совместное использование кода между сервером и клиентом — это реально
- Совместное использование инфраструктуры с интерфейсными инструментами (их так много!) имеет большое значение: инструменты разработки, CI, качество кода, что со временем приводит к повышению эффективности всей команды.
- Наконец, Ruby — отличный язык, но уже не такой популярный, как машинописный текст.
Что нужно для создания Rails в мире TypeScript?
- Модели — мощная абстракция ActiveRecord, которая волшебным образом умеет подключаться и работать.
- Обработка базы данных: миграция, заполнение — и поддержка нескольких баз данных для повышения удобства разработки.
- Контроллеры, маршрутизация, аутентификация и передовые методы безопасности — чтобы упростить создание API, а также избежать распространенных ошибок безопасности.
- Рассылочные программы. Хотя вы можете отправлять электронные письма через сторонние SaaS, гораздо эффективнее создавать, тестировать и экспериментировать с электронной почтой локально. вам нужна поддержка для этого.
- Фоновые задания – потому что использование службы необработанных очередей, такой как SQS, не так эргономично или удобно для тестирования, как использование выделенной среды фоновых заданий.
- Задачи — вам нужно исправить записи, очистить данные или отправить пользователям специальные электронные письма. Создайте пользовательскую задачу, которую можно полностью протестировать с доступом к вашему реальному приложению, и вызовите ее так же, как вы используете
make
. - Интерактивный REPL – удобный удаленный или локальный доступ к живым объектам и информации о приложении.
- Генерация кода и формирование шаблонов — стройте быстрее, создавая модели, контроллеры и многое другое.
- Тестирование как первоклассное лицо — каждая часть платформы поддается чистому и простому тестированию.
- Конфигурация и удобство использования — такие вопросы, как ведение журнала, мониторинг и плоскость управления приложениями.
- Соглашения и мнения — структура папок, именование, линтинг, форматирование — все это снято с вашей спины, чтобы вы могли сосредоточиться на создании продуктов.
- KISS — когда стоит выбор, всегда выбирайте более простой путь. Например, ActiveRecord поверх Data Mapper или любая другая магия сопоставления сущностей. ActiveRecord предоставляет более простой код.
- Представления — автоматический способ избавиться от стандартного форматирования, сериализации ответов и состояний ошибок из приложения в сторону клиентов.
Вот некоторые из испытаний и невзгод, если вы попытаетесь собрать такую вещь с нуля, особенно для Javascript и Node.js. Наверняка что-то из этого звучит знакомо:
- Создавая это с помощью экспресса, вам нужно помнить об асинхронных сбоях. Да, Koa и другие великолепны, но Express работает для подавляющего большинства случаев использования API, он также прост и широко распространен, и это то, что люди обычно ожидают найти в проекте API общего назначения.
- Подбор и подключение регистраторов может привести к путанице при обработке запроса, области видимости процесса и многого другого, вам придется провести иглу через глобальные и локальные состояния в придуманном мире.
- Создание инфраструктуры фоновых заданий с нуля приведет к неудаче. Здесь слишком много нужно знать, чтобы построить это с нуля или даже выбрать правильную систему очередей и построить на ее основе правильную абстракцию и инфраструктуру.
- Для тестирования вам необходимо создать приложение Express, не забудьте очистить базы данных, настроить схему, загрузить данные и запустить тесты. Все это инфраструктура, которую вы должны создавать методом проб и ошибок, пока она не будет работать для вас хорошо.
И это только вершина айсберга. К счастью, я построил Hyperstack, поэтому вам не нужно создавать его самостоятельно.
Приложение Hyperstack за 5 минут
Hyperstack — это веб-фреймворк TypeScript, полярной звездой которого является Rails. Он близко следует за Rails, когда это приносит пользу разработчику, но радикально отклоняется там, где это приносит пользу прагматизму создания приложения Node.js в Typescript.
Давайте создадим наше первое приложение:
$ pnpm create hyperstack $ cd my-hyper-app $ pnpm install $ bin/hyperstack start
И готово!
Hyperstack создал базу данных, мигрировал, настроил вашу рабочую среду разработки, транспилировал JavaScript и настроил для вас причудливую службу API с отличными настройками по умолчанию, такими как безопасные заголовки, статическое обслуживание, предварительный просмотр электронной почты и фоновые рабочие процессы, которые находятся в процессе, но с конфигурацией. стать полностью масштабируемыми процессорами фоновых заданий на основе очередей.
Убейте процесс CTRL-C
и добавим наш блог article
:
$ bin/hyperstack g scaffold article title:string body:text Loaded templates: gen/dist/templates added: src/test/requests/articles/sanity.spec.ts added: src/app/controllers/articles.ts added: src/config/db/migrate/1337_article.js added: src/test/models/article.spec.ts added: src/app/models/article.ts inject: src/app/controllers/index.ts inject: src/app/controllers/index.ts inject: src/app/models/index.ts ✔ shell: running eslint shell: yarn eslint --fix src/app/models/*.ts src/app/controllers/*.ts src/test/models/*.spec.ts src/test/requests/articles/*.spec.ts src/config/db/migrate/*.js
Вы получаете бесплатно контроллер, модель, миграцию и автоматически написанные тесты.
Запустите ваше приложение снова и давайте начнем делать запросы:
$ bin/hyperstack start
Я использую xh
, но вы можете использовать аналогичный httpie
или что угодно:
Список:
$ xh -j -b localhost:5150/articles { "articles": [] }
Он пуст, поэтому давайте создадим одну статью:
$ xh -j -b localhost:5150/articles title="hello hyperstack" body="EVH rocks" { "article": { "title": "hello hyperstack", "body": "EVH rocks" } }
Еще раз взгляните на список:
$ xh -j -b localhost:5150/articles { "articles": [ { "title": "hello hyperstack", "body": "EVH rocks" } ] }
Готово!
Не стесняйтесь исследовать далее в документах. Вы можете играть с hyperstack routes
и hyperstack portal
для интерактивного REPL и многое другое.
Помните: сложность всегда находит свой путь
Мы боремся со сложностями и избегаем простоты — Норман Винсент Пил
Вы всегда можете учиться и создавать полные фреймворки с нуля. Вы также можете потратить время на создание масштабируемых архитектур с нуля.
Но иногда вы хотите просто создать продукт или создать что-то интересное, не подписываясь на недели установки, инфраструктуры и настройки в качестве предварительного шага.
Для быстрого создания продуктов просто используйте Hyperstack.
Как принять участие
Вы можете начать с веб-сайта или перейти в репозиторий Github, чтобы прочитать исходный код. Мы также принимаем PR, если у вас есть улучшения или проблемы, о которых нужно сообщить.