Взгляните на наш новейший инструмент с открытым исходным кодом для программистов

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, если у вас есть улучшения или проблемы, о которых нужно сообщить.