Обзор возможностей языка вне Apple-экосистемы
Ниже мы рассмотрим, для каких задач, связанных с серверной разработкой, можно применять язык Swift. Swift вполне можно считать конкурентом новым активно развивающимся языкам, таким как Go и Rust.
Помимо разработки приложений, наиболее распространенный вариант применения языка — написание серверной части. Отличный вариант для тех, кто слабо знаком с другими языками, но хочет написать для своего приложения сервер. В чем-то это напоминает историю с веб-разработкой, когда появление Node.js позволило писать на одном языке как клиентскую, так и серверную части.
Возможно, вам даже удастся использовать некоторые участки кода как на сервере, так и на клиенте, что тоже является плюсом.
Для написания бэкенда уже создано несколько фреймворков, которые мы сейчас и рассмотрим.
Perfect
Наиболее популярный фреймворк для разработки серверной части на Swift — это Perfect (~10000 звезд на GitHub за полтора года существования проекта — неплохой показатель). В качестве среды разработки можно полноценно использовать Xcode, используя его инструменты отладки.
«Hello World» на Perfect выглядит весьма просто:
import PerfectLib
public func PerfectServerModuleInit() {
Routing.Handler.registerGlobally()
Routing.Routes["/"] = { _ in return HelloWorldHandler() }
}
class HelloWorldHandler: RequestHandler {
func handleRequest(request: WebRequest, response: WebResponse) {
response.appendBodyString("Hello, World!")
response.requestCompletedCallback()
}
}
Как можно видеть, в приведенном коде создается класс-обработчик запроса для адреса «/». Ничего сложного.
Помимо базовых функций, Perfect имеет довольно много важных возможностей, которые позволяют написать полноценный сервер на Swift, а именно:
- Коннекторы баз данных — в частности, доступны наиболее популярные на данный момент MySQL, PostgreSQL и MongoDB. Однако, стоит заметить, что для Oracle и MS SQL коннекторов пока что нет.
- ORM.
- Множество вспомогательных утилит — например, для работы с файлами, парсинга JSON и XML, логгирования и т. д.
- Поддержка WebSocket.
Vapor
Еще один известный фреймворк — это Vapor. «Hello World» на нем вообще элементарный:
import Vapor
let drop = Droplet()
drop.get("hello") { req in
return "Hello, world."
}
drop.run()
По набору фич и популярности Vapor вполне сопоставим с Perfect, однако, он скорее заточен под веб-разработку, о чем и заявлено на официальном сайте.
Еще из приятного — у обоих этих фреймворков отличная документация.
Помимо них, существуют еще Zewo и Kitura.
Kitura примечателен тем, что поддерживается компанией IBM, однако, документация и список фич более скудные, чем у Perfect и Vapor. Как заявляют разработчики, его дизайн во многом похож на Express.js, который был частично затронут в нашей статье про бэкенд на Node.js.
Zewo на данный момент недостаточно развит. Судя по всему, проект еще не «вырос» до состояния, пригодного для какого-либо реального использования. Мне даже не удалось найти нормальной документации, включающей в себя формальное описание API.
Где ещё можно применять Swift?
Вообще, учитывая наличие тулчейна, можно было бы предположить, что язык можно полноценно применять для разработки под Linux, однако, это не совсем верно. Проблема не в самом языке, а в отсутствии необходимых библиотек. На данный момент написание GUI-приложений на Swift под Linux нецелесообразно — есть только экспериментальные биндинги для GTK+. Остается надеяться, что со временем этот недостаток будет исправлен.
Когда то, в апреле 2016 появились слухи о том, что Google хочет перевести Android на Swift. Наверное, это было бы весьма круто, но с тех пор тема больше не поднималась и поэтому назвать Swift полностью универсальным и кроссплатформенным языком нельзя.
Если подытожить вышесказанное, то прогресс языка в области разработки бэкенда не может не радовать. Однако, на данный момент Swift не способен заменить C++ или Java для Linux-разработки, несмотря на наличие тулчейна. Swift под Android — пока что лишь слухи. Поэтому применение языка пока ограничено двумя областями — разработка под Apple-девайсы и разработка серверной части, будь то нативные приложения или веб.