Статьи

Как программировать с помощью Swift на сервере

Конечный продукт
Что вы будете создавать

С тех пор как Apple впервые представила Swift как преемника Objective-C, она произвела революцию в том, как сообщество кодирует приложения для iOS, macOS, watchOS и tvOS. Когда Swift стала платформой с открытым исходным кодом, она открыла новые возможности для языка помимо мобильных и клиентских приложений — Swift также стал языком сервера! В этом уроке вы узнаете, что такое серверный Swift и почему вы хотите иметь Swift на своем сервере.

Инициатива Swift на стороне сервера продвигается тремя известными проектами — Vapor от Qutheory , IBM Kitura и Perfect — с целью позволить разработчикам Swift создавать полноценные серверные сервисы. Это, по сути, превратит таких разработчиков в разработчиков полного стека, избавляя от необходимости полагаться на Node или PHP или предоставляя контроль над платформой BaaS, такой как Google Firebase.

В этой статье вы узнаете все о серверном Swift. Сначала я объясню, как работает серверный Swift, а затем я покажу, как начать работу с платформами Kitura, Vapor и Perfect.

Впервые Swift был анонсирован Apple в 2014 году и быстро стал одним из самых быстрорастущих языков программирования. Swift опирается на многие из лучших современных языков, таких как Python, что обеспечивает элегантность и простоту использования. Это освобождает инженеров от технических оков Objective-C, обеспечивая более плавную и интуитивно понятную работу.

В декабре 2015 года Apple сделала еще одно грандиозное объявление и сделала язык Swift вместе с поддерживающими библиотеками, отладчиком и диспетчером пакетов проектом с открытым исходным кодом под лицензией Apache 2.0 , открыв платформу для общественности для создания запросов извлечения и делать вклад. Отход от Objective-C не только соблазнил многих разработчиков Objective-C, внесших вклад в App Store, но и облегчил разработчикам всех навыков и профессий вход в экосистему Apple с помощью Swift.

Однако, хотя инструменты разработки Apple исторически облегчали разработчикам создание визуально привлекательных и привлекательных приложений для App Store, одним заметным узким местом было то, что проектам по-прежнему требовались специализированные серверные разработчики для создания сложных приложений, управляемых данными. Таким образом, разработчикам iOS и macOS потребуется либо помощь разработчика Python, PHP или Node для создания своей внутренней базы данных, либо приобретение собственных навыков, что приведет к значительно более тяжелой рабочей нагрузке для выполнения задач проекта.

Хотя back-end-as-a-service (BaaS) пришел на помощь разработчикам iOS, благодаря не имеющим кода серверным решениям, таким как Google Firebase и собственный CloudKit от Apple, которые облегчают сложность серверной части, многие команды и проекты требуют большего. Именно здесь вступает в действие серверный Swift, позволяющий вам создать полноценный многопоточный внутренний сервер с открытым исходным кодом и бесконечно настраиваемым.

Серверный сервер Swift позволяет вам выбрать способ размещения вашего внутреннего сервера, будь то с помощью AWS, RackSpace или ваших собственных физических серверов. Вы также можете выбрать способ балансировки нагрузки на свои серверы (например, с помощью популярных серверных решений, таких как NGINX) и как сохранить ваши данные в базе данных (будь то решения NoSQL, такие как MongoDB, или традиционные базы данных, такие как Postgres, MySQL или Oracle) , Более того, вы никогда не привязаны к однокомпонентному решению — вы можете переключаться, не влияя на всю кодовую базу приложения.

Дело в том, что, выбирая решение Swift на стороне сервера с открытым исходным кодом, такое как Vapor от Qutheory , IBM Kitura или Perfect , вы используете широкий спектр плагинов, которые позволяют настраивать серверную часть именно так, как вам нужно. это, используя набор навыков вашей существующей команды в Swift, чтобы сделать это.

Серверная часть Swift, безусловно, звучит убедительно, но какая платформа вам подходит? Далее мы рассмотрим каждый из них по очереди, начиная с Kitura.

Начиная с Kitura , у вас есть платформа, которая была первоначально выпущена в феврале 2016 года и приобрела известность позже в том же году на WWDC Apple, представляя стремление IBM поддерживать серверную сеть с помощью Swift, который затем был настроен на переход от рук Apple к открытому исходному коду.

Вообще говоря, Kitura сосредоточена на соглашении, а не на конфигурации: она строит ваш первоначальный проект с помощью заглушек, прежде чем вы выберете конкретные платформы и библиотеки, которые вы хотите создать. Механизм аутентификации Kitura поддерживается его собственной платформой промежуточного программного обеспечения Kitura-Credentials , позволяющей выбирать из шведского стола механизмов аутентификации, от традиционного имени пользователя / пароля до входа в социальные сети и федеративной аутентификации, используя OpenID, который обрабатывает веб-токены JSON (JWT ).

Решение ORM для баз данных Kitura работает от Kuery, чтобы скрыть сложности работы с SQL напрямую, изначально поддерживая общие реляционные базы данных, такие как MySQL, SQLite и PostgreSQL, а также другие решения для баз данных, включая базы данных NoSQL, через различные другие совместимые плагины.

Kitura также предоставляет другие полезные плагины для таких вещей, как шаблоны HTML, используя популярные плагины, такие как Stencil и Markdown . Исходя из IBM, инфраструктура на стороне сервера также выигрывает от тесной связи с API-интерфейсами IBM Watson, а также обеспечивает встроенную поддержку macOS для интеграции непосредственно в их облачную платформу Bluemix . Это обеспечивает дополнительную опцию в вашем распоряжении, наряду с вашими другими традиционными вариантами развертывания на серверах Linux / Unix и macOS.

Хотя платформа, безусловно, предоставляет уникальный набор функций — от Kuery до возможности интеграции с различными библиотеками API IBM — у нее нет влияния сообщества, которое есть у Vapor. Принятие Kitura требует признания и принятия своих собственных нетрадиционных способов ведения дел, от того, как работает Kuery до его механизмов аутентификации. Тем не менее, учитывая, что он поддерживается крупной компанией, ориентированной на предприятие, в него встроены некоторые гарантии будущего.

Страница документации Kitura

Самый быстрый способ начать работу — использовать интерфейс командной строки (CLI) Kitura, поддерживаемый как в MacOS, так и в Linux. Используя популярную утилиту управления пакетами Homebrew , установите Kitura и Kitura CLI, введя следующее:

1
2
$ brew tap ibm-swift/kitura
$ brew install kitura

В пустой папке, которую вы будете использовать в качестве проекта, выполните следующую команду для инициализации проекта:

1
$ kitura init

Когда вы закончите генерацию вашего скелетного приложения, вы заметите новый проект под названием HelloKitura.xcodeproject . Вы можете узнать больше о создании проектов, обратившись к официальной документации Kitura . Вы можете открыть новый сгенерированный проект в XCode и отредактировать основной класс приложения, Application.swift , чтобы обрабатывать все вызовы к корню вашего сервера http: // localhost: 8080 / URL:

1
2
3
4
5
// Handle HTTP GET requests to «/»
router.get(«/») { request, response, next in
    response.send(«Hello, World!»)
    next()
}

Приведенный выше фрагмент кода возвращает классический Hello, World! , Прежде чем вы сможете, наконец, запустить проект, измените схему Xcode, указав на HelloKitura (ваш активный проект), и запустите ваш проект, нажав CommandR. Пока ваш сервер работает, в любом браузере перейдите по адресу http: // localhost: 8080, и вы должны увидеть текст hello world в своем браузере.

Проверьте следующие ссылки для получения дополнительной информации о Kitura.

Выпущенный на несколько месяцев позже, чем Kitura, в сентябре 2016 года Vapor от Qutheory широко считается самым популярным с точки зрения размера сообщества и количества плагинов. Он построен на основе фреймворка Apple Swift-nio , что делает его мощным двигателем производительности. В отличие от Kitura и других платформ, которые построены не только на Swift, но и на Node.js или других промежуточных синтаксических анализаторах, Vapor отделяет себя от любой из этих зависимостей, предоставляя синтаксический анализатор Swift и предоставляя понятные и читаемые API.

Страница документации Vapor

Vapor обеспечивает всестороннюю поддержку баз данных для поставщиков SQL, таких как MySQL и PostgreSQL, а также поставщиков NoSQL, таких как Redis и MongoDB, таких как Kitura. В то время как Kitura имеет собственное решение Kuery ORM, Vapor использует Fluent ORM для поддержки баз данных, о которых я только что упомянул, что позволяет относительно легко распространять ORM на других сторонних поставщиков баз данных. Vapor отделяет себя от других платформ благодаря собственной поддержке службы push-уведомлений Apple, а также поддержке SMTP для отправки уведомлений по электронной почте.

Принимая во внимание, что Kitura реализует свою собственную структуру аутентификации, Vapor имеет встроенную библиотеку аутентификации Турникета Stormpath . Как и Kitura, платформа также поддерживает шаблоны Mustache и Markdown, а также собственный экспрессивный язык шаблонов Swift — Leaf . Vapor также поставляется с собственным механизмом CLI, как и другие серверные среды Swift, с возможностью расширения аргументов командной строки приложения с помощью пользовательских флагов.

Чтобы начать работу с Vapor, вы начинаете с установки набора инструментов Vapor , который состоит из всех библиотечных зависимостей и набора инструментов CLI. Установите его с помощью Homebrew, введя в терминал следующее:

1
$ brew install vapor/tap/vapor

Когда установка будет завершена, вы можете подтвердить, что Vapor успешно установился, введя vapor —help . Чтобы создать проект, введите следующее, заменив его собственным именем проекта:

1
$ vapor new <PROJECT_NAME>

Движок Vapor создаст структуру папок, похожую на следующую:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
.
├── Public
├── Sources
│ ├── App
│ │ ├── Controllers
│ │ ├── Models
│ │ ├── boot.swift
│ │ ├── configure.swift
│ │ └── routes.swift
│ └── Run
│ └── main.swift
├── Tests
│ └── AppTests
└── Package.swift

Чтобы фактически создать проект Xcode, вам также необходимо явно ввести следующую команду из папки проекта:

1
$ vapor xcode

Наконец, чтобы построить и запустить свой проект, в XCode выберите схему « Выполнить» , а также целевое устройство развертывания My Mac , а затем нажмите кнопку « Выполнить» , как вы это сделали бы для любого другого проекта XCode. Если в вашем проекте XCode нет ошибок, вы должны увидеть в терминале следующее подтверждающее сообщение:

1
Server starting on http://localhost:8080

Идите вперед и введите этот URL в выбранном вами браузере, и вы должны увидеть, что ваше приложение работает.

Проверьте следующие ссылки для получения дополнительной информации.

Наконец, мы взглянем на Perfect by PerfectlySoft, многофункциональную серверную платформу, такую ​​как Vapor и Kitura. Perfect включает в себя те же стандартные функции, что и у предыдущих поставщиков, от шаблонизации с помощью Mustache или Markdown до создания сетей с использованием веб-сокетов, а также Apple Push Notification и SMTP.

Идеальная страница документации

Как и другие серверные платформы, Perfect имеет собственную реализацию ORM, платформу StORM (Perfect StORM), которая обеспечивает встроенную поддержку MySQL, PostgreSQL и других известных реляционных баз данных, а также MongoDB, Redis и других решений NoSQL. Одно заметное упущение в Perfect — это CLI, но фреймворк восполняет это с помощью родного приложения macOS.

Как и Vapor, у Perfect также есть турникет, встроенный в механизм аутентификации, расширенный для более тесного взаимодействия с StORM. Еще одно отличие этого решения от других заключается во многих вспомогательных библиотеках утилит, которые оно поддерживает, включая их собственную оболочку cURL, а также инструменты для работы с файлами и папками. База разработчиков Perfect является второй по величине, почти наравне с Vapor, а это означает, что у вас есть сильное сообщество, поддерживающее эту платформу, а также богатый набор образовательных ресурсов, чтобы дать вам уверенность, если вы выберете ее.

Начать работать с Perfect очень просто. Сначала клонируйте репо PerfectlySoft, введя следующее:

1
$ git clone https://github.com/PerfectlySoft/PerfectTemplate.git

Из клонированной папки создайте проект:

1
$ swift build

Наконец, запустите проект, который запустит локальный сервер по адресу 0.0.0.0:8181 :

1
.build/debug/PerfectTemplate

Вы также можете запустить свой проект в Xcode, сначала сгенерировав новый проект, как показано ниже:

1
$ swift package generate-xcodeproj

В Xcode убедитесь, что ваша исполняемая цель указана на My Mac , прежде чем создавать и запускать проект.

Проверьте следующие ссылки для получения дополнительной информации о Perfect Framework.

Выпуск Swift для сообщества разработчиков программного обеспечения с открытым исходным кодом подтолкнул к появлению решений Swift, выходящих за рамки клиентских приложений, с выходом на новый уровень серверных инфраструктур. Под влиянием трех выдающихся проектов — Vapor от Qutheory , IBM Kitura и Perfect — Swift на стороне сервера позволил инженерам iOS (и macOS) стать разработчиками полного стека. Это может свести на нет зависимость от внутренних разработчиков Node.js, PHP или .NET. Серверная часть Swift также дает командам возможность управлять своим бэкэндом без необходимости полагаться на мобильные бэкэнды в качестве услуги, такие как Firebase или CloudKit.

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