Wasp  -  DSL-язык для современных веб-приложений

В прошлые выходные мне удалось выкроить время и выполнить обещание, данное команде Wasp,  —  опробовать на практике их язык.

Что такое Wasp

Новые языки, фреймворки и библиотеки появляются регулярно, а разбираться во всем этом все более утомительно, особенно если вы работаете в интернете. С начала моей карьеры веб-разработчика прошло уже 10 лет, но некоторые моменты профессиональной деятельности по-прежнему вызывают у меня восторг. Поэтому, когда я узнал о Wasp, мне стало очень интересно.

Вот что говорят создатели Wasp:

Wasp  —  это язык программирования для создания веб-приложений полного стека. Это означает, что Wasp берет на себя все три основные части веб-приложения: клиент (фронтенд), сервер (бэкенд) и развертывание.

По сути, вы получаете DSL  —  доменно-специфичный язык. Скорее всего, вы уже сталкивались с таким явлением, но все же упомяну несколько DSL. Безусловно, самым популярным и известным DSL является HTML, а также SQL и MATLAB.

Wasp (в моем понимании)  —  это DSL, который объединяет традиционные области веб-разработки в одну, но при этом позволяет использовать ваши любимые внешние библиотеки, такие как React. Это видно в данном фрагменте кода:

import createTask from '@wasp/actions/createTask'
import updateTask from '@wasp/actions/updateTask'
import logout from '@wasp/auth/logout.js'
import Clocks from './Clocks'

const MainPage = () => {
    const { data: tasks, isFetching, error } = useQuery(getTasks)

    return (
        <div>
            <NewTaskForm />

            {tasks && <TasksList tasks={tasks} />}

            {isFetching && 'Fetching...'}
            {error && 'Error: ' + error}
            <div> <Clocks /> </div>
            <button onClick={logout}> Logout </button>
        </div>
    )
}

Конечно, можно как обычно использовать React и другие сторонние библиотеки. Если вы уже писали код на React, вам все будет понятно.

Но не будем забегать вперед.

Приложение ToDo

Тем, кто зарегистрируется для альфа-тестирования, предоставляется удобное и подробное руководство по созданию приложения для списка дел. Такие приложения  —  отличный способ научиться программированию!

Приложение Wasp, которое вы будете создавать,  —  это полностью функционирующее приложение со всеми необходимыми элементами. В руководстве говорится, что на его создание потребуется около 30 минут. И это действительно так. 

Конечно, если писать весь код React, можно потратить на это больше часа. Это важно отметить, поскольку в реальной жизни мы, как правило, набираем большую часть кода сами, а не пользуемся готовыми сниппетами. Причина, по которой я набирал вручную код Wasp, заключалась в том, что почти каждый день я трачу несколько часов на написание React, а это не то, что мне было интересно изучать. Я настоятельно рекомендую писать код Wasp вручную.

Итак, мы подошли к следующему пункту  —  синтаксису.

Не могу сказать точно, нравится мне этот синтаксис или нет. Он определенно имеет индивидуальные особенности и напоминает {= your code =} в Wasp, как, например, в этом сниппете Prisma:

entity User {=psl
id Int @id @default(autoincrement())
email String @unique
password String
tasks Task[]
psl=}

К этому синтаксису стоит немного привыкнуть  —  вот все, что я могу сказать. IDE (или по крайней мере WebStorm) еще не знают, что делать с файлами .wasp, и в этом нет ничего удивительного, поэтому определение синтаксиса и его подсветка отсутствуют.

В руководстве рассказывается о нескольких основных темах, таких как базовые функции CRUD, аутентификация и внешние зависимости. На выходе вы получите довольно интересное приложение, которое по большей части создано с помощью конфигурационного файла  —  main.wasp. Если хотите ознакомиться с кодом, то он находится в открытом доступе на GitHub. Что еще более интересно  —  клон Medium на Wasp. Если хотите изучить тему подробнее, воспользуйтесь этим репозиторием.

Главный плюс с моей точки зрения: после того, как вы поймете, как все работает, Wasp станет вполне понятен. Объявите действия и сущности в конфигурационном файле Wasp, наложите пользовательский интерфейс  —  и все готово. Добавить функции входа и регистрации очень просто, а если вы внимательно посмотрите на готовое приложение, то увидите, насколько легко повторно использовать код для других проектов.

В веб-разработке дьявол всегда кроется в деталях, но с Wasp все кажется не таким уж сложным. Поняв его шаблон, вы готовы к дальнейшей работе.

Однако к некоторыми элементам все же придется привыкать. Работа с полусгенерированным приложением не всем по душе, но если вы любите все контролировать (и код в том числе), то Wasp станет для вас многообещающим инструментом.

Кроме того, есть еще инструмент Prisma.db. Не могу сказать, что являюсь его поклонником, но, возможно, причина в том, что я использовал его слишком мало. Но пусть Prisma не отталкивает вас от попытки попробовать Wasp. Работая с Prisma на практике, вы быстрее поймете основы этого инструмента.

Наконец, стоит обратить внимание на то, что не все элементы в приложении поддерживают перезагрузку в реальном времени. Однако это проблема не Wasp, а скорее Webpack. Удаление или добавление файлов в моем случае обычно требовало перезапуска приложения с помощью wasp start. Еще пара команд, которые вы будете часто использовать  —  это wasp db migrate-dev и wasp db studio.

Вывод

Спойлер: если вы зарегистрируетесь для прохождения альфа-теста, вам пообещают несколько подарков от Wasp. Полагаю, это сделано для того, чтобы отблагодарить людей за потраченное время. Но я зарегистрировался, потому что хотел показать возможности Wasp другим людям и подбодрить команду Wasp в их стремлении сделать этот инструмент популярным среди большего числа разработчиков.

Стану ли я большим поклонником Wasp? Пожалуй, нет. Как я уже говорил ранее, я не верю в безоговорочное принятие чего-либо в разработке ПО. Я рассматриваю Wasp в качестве потенциально отличного инструмента, который следует использовать в конкретных случаях. В текущем состоянии я бы охарактеризовал Wasp так:

Wasp может стать “крепким орешком”, если вы привыкли писать код для веб-приложения по принципу “фронтенд, бэкенд, инфраструктура”. Он многое упрощает, но при этом позволяет сохранять контроль над ситуацией.

Стоит ли попробовать Wasp? Точно стоит. Стоит ли использовать Wasp для всех веб-приложений в будущем? Конечно, нет. Вы ведь инженер-программист, и часть вашей работы заключается в использовании подходящих языков, фреймворков и библиотек для проектов. Wasp  —  это не то решение, которое не требует абсолютно никакого кода, он не предназначен для статичных и презентационных сайтов.

Wasp  —  это очень перспективный инструмент. Используйте его с умом.

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Attila Vágó: I Tried Wasp, A DSL For Modern Web Applications

Предыдущая статья3 эффективные новинки Swift с WWDC 2022
Следующая статьяЗнакомство с SurrealDB с помощью Express.js, Node.js и TypeScript