Начало работы с Vapor: веб-фреймворк для Swift

Автор: | 04.08.2026

Веб-фреймворки для Swift начали появляться почти сразу после того, как Swift стал открытым исходным кодом в конце 2015 года. Vapor быстро стал одной из самых популярных библиотек для разработки веб-приложений на Swift. В этом кратком руководстве вы узнаете основы использования Vapor для создания веб-приложений на Swift.

Прежде чем мы рассмотрим, как работает Vapor, нам нужно установить несколько инструментов.

Первое, что нам понадобится, — это Swift 3 с менеджером пакетов Swift (Swift Package Manager). Следуйте этому руководству, чтобы установить Swift на вашу систему. Если вы используете Linux, возможно, это руководство будет проще для восприятия, чем официальный сайт Apple.

Вы можете проверить, что у вас установлена версия Swift 3.0 или выше, выполнив следующую команду:

Нам также понадобится Vapor. Vapor поставляется с интерфейсом командной строки, который упрощает многие задачи, связанные с созданием, запуском и развертыванием веб-приложений на Swift. Установите Vapor, выполнив следующую команду в терминале:

Проверьте, что он работает, выполнив команду:

Давайте запустим «туманный генератор» и убедимся, что Vapor работает на нашей машине. Мы также ознакомимся с примером проекта, который он создает. Создайте проект Vapor, используя команду CLI Vapor `vapor new`:

Убедитесь, что все работает правильно, собрав и запустив пример проекта:

Теперь, когда мы знаем, что все работает, давайте разберемся, что заставляет Vapor функционировать.

Веб-приложение в Vapor называется `Droplet`. Откройте файл `VaporSample/Sources/App/main.swift`, чтобы увидеть, где определен наш `Droplet`. Он должен выглядеть следующим образом:

В `main.swift` маршрут по умолчанию на строках 5-9 использует представление `welcome.leaf`, которое находится в `VaporSample/Resources/Views/welcome.leaf`. Поскольку у него нет имени маршрута, он работает по базовому URL. Этот маршрут использует встроенный в Vapor шаблонизатор Leaf. Мы будем использовать Leaf при создании нашего первого примера.

Строка 11 определяет RESTful-ресурс с именем `posts` для представления постов в блоге. Она создает несколько маршрутов в `VaporSample/Sources/App/Controllers/PostController.swift`. Этот пример использует функции, выходящие за рамки данной статьи, но вы можете прочитать об этом больше в документации Vapor о контроллерах.

`drop.run()` на строке 13 запускает сервер.

Теперь, когда мы знаем основы работы Vapor, мы можем использовать маршрутизатор и шаблонизатор Leaf для отображения примера «Hello World», который приветствует посетителя по имени.

Первое, что нам нужно сделать, — это определить маршрут для GET-запроса к `/hello`. Мы также удалим существующие примеры, чтобы они не отвлекали нас во время обучения. Замените содержимое `main.swift` следующим кодом:

Мы хотим поприветствовать посетителя по имени, поэтому попросим его передать его в качестве параметра, например, `http://localhost:8080/hello?name=Brent`. Давайте обновим маршрут `hello`, чтобы получить параметр запроса `name`:

В выделенной строке мы проверяем, есть ли значение `name` в словаре `request.data`, предоставленном объектом `Request` Vapor. Если оно есть, мы сохраняем строковое представление в локальной константе `name`. Если нет, мы сохраняем «незнакомец» в качестве имени.

Далее мы будем использовать представление Vapor для отображения тега `

`, который приветствует нашего посетителя. Начнем с создания файла `hello.leaf` в `VaporSample/Resources/Views`:

Мы настроим разметку `hello.leaf` так, чтобы она расширяла макет `base.leaf`, предоставленный в примере. В нем определены области-заполнители `head` и `body` с использованием `#import`, в которые мы можем поместить содержимое нашего представления. Вот как должен выглядеть `base.leaf`:

Добавьте следующий код в `hello.leaf`:

В первой строке мы указываем, что используем макет `base.leaf`. Затем мы используем `#export`, чтобы объявить разметку, которая будет помещена в области-заполнители `#import` базового макета. Строка 8 использует свойство `name`, которое мы передадим в представление из нашего маршрута.

Вернитесь к `main.swift` и добавьте выделенный код в маршрут `hello`, чтобы создать и вернуть представление `hello`:

Мы используем `drop.view.make` для создания представления с именем `hello`, передавая параметр `name`, который будет использоваться представлением. Это все, что нам нужно для отображения этой веб-страницы с передачей имени, так что давайте протестируем это.

Вернитесь в терминал и соберите приложение с помощью CLI Vapor:

После успешной сборки используйте CLI Vapor для запуска сервера Vapor:

Теперь попробуйте использовать свое имя.

Что, если вы хотите создать API для своего мобильного приложения с помощью Vapor? Скорее всего, вы захотите работать с JSON. К счастью, поддержка JSON встроена. Создайте маршрут для POST-запроса к `/person`, который принимает тело `x-www-form-urlencoded`, содержащее значения `name` и `city`. Нам нужно будет работать с модулем `HTTP` Vapor, поэтому добавьте следующую строку импорта в начало `main.swift`:

Добавьте выделенный код сразу после закрывающей скобки маршрута `hello` в `main.swift`:

Первое, что нам нужно сделать, — это убедиться, что оба параметра `name` и `city` переданы, так как они обязательны для нашего маршрута. Используйте оператор guard в Swift, чтобы прервать выполнение и вернуть ошибку `Bad Request`, если отсутствует один из этих параметров, одновременно удобно установив их в локальные константы:

Обратите внимание, что мы используем тот же словарь `request.data`, который использовали для параметров запроса, чтобы получить значения `x-www-form-urlencoded`.

Теперь, когда у нас есть значения запроса, давайте сгенерируем ответ. Поскольку мы хотим имитировать создание объекта `person` на нашем сервере, нам нужно отправить статус `201 Created` в нашем ответе. Мы также отправим обратно JSON-версию созданного объекта. Добавьте выделенный код для генерации ответа:

Соберите и запустите приложение:

Вот команда cURL, если вы предпочитаете терминал:

В конце ответа вы должны увидеть следующее:

Работать с JSON в Vapor очень просто. Что действительно удобно, так это то, что данные JSON, переданные в маршрут, доступны так же, как параметры запроса и значения тела `x-www-form-urlencoded`. Для получения дополнительной информации об этом ознакомьтесь с документацией Vapor.

Если вы хотите узнать о развертывании вашего приложения на Heroku, следуйте этому руководству.

Если вы предпочитаете визуальное обучение, вот видеоурок, который охватывает большую часть того, что рассмотрено в этой статье:

Возможность использовать Swift для веб-разработки очень увлекательна. Встроенная поддержка JSON, простота использования и легкое развертывание делают Vapor отличным выбором для создания API и веб-приложений на Swift. Вот несколько вещей, которые можно попробовать дальше:

— Изучите группировку маршрутов для создания разных версий API.

— Добавьте собственные команды в CLI Vapor.

— Ознакомьтесь с другими веб-фреймворками для Swift, такими как Kitura или Perfect.

Я с нетерпением жду, что вы создадите с помощью Swift в вебе. Вы можете найти меня в Twitter @brentschooley или отправить мне письмо на brent@twilio.com.