Имеется ли опыт разработки backend на Vapor?

Ответ

Да, есть опыт создания серверных приложений на Vapor — веб-фреймворке, написанном на Swift.

Ключевые преимущества Vapor:

  • Нативный Swift: Позволяет использовать один язык для клиентской (iOS/macOS) и серверной части, делиться моделями данных и бизнес-логикой.
  • Высокая производительность: Основан на неблокирующей, event-driven архитектуре (использует SwiftNIO от Apple), что обеспечивает высокую пропускную способность.
  • Type-safe и Expressive: Благодаря Swift, API роутинга, запросов и ответов являются типобезопасными и удобочитаемыми.
  • Активное сообщество и экосистема: Существует множество пакетов (через Swift Package Manager) для работы с базами данных (Fluent), аутентификации, веб-сокетов и т.д.

Пример простого REST API эндпоинта:

import Vapor

// Конфигурация приложения
let app = try Application()
let router = try app.make(Router.self)

// Определение модели данных (Codable)
struct Todo: Content {
    var id: Int?
    var title: String
}

// Роут для GET запроса на /todos
router.get("todos") { req -> [Todo] in
    // Здесь обычно запрос к базе данных через Fluent
    return [
        Todo(id: 1, title: "Изучить Vapor"),
        Todo(id: 2, title: "Написать API")
    ]
}

// Роут для POST запроса на /todos
router.post(Todo.self, at: "todos") { req, todo -> Todo in
    // Принимаем JSON тело, декодируемое в модель Todo
    // Сохраняем в БД и возвращаем созданный объект
    var newTodo = todo
    newTodo.id = 3 // Генерируем ID
    return newTodo
}

try app.run()

Области применения: Создание REST/GraphQL API, веб-сайтов с серверным рендерингом, real-time приложений с WebSockets, микросервисов.

Ответ 18+ 🔞

О, Vapor, говоришь? Ну, это та самая штука, когда ты на Swift не только айфонные приложения можешь лепить, но и серверную часть, блядь, на нём же поднять. Прям как универсальный солдат, ёпта!

Что в нём такого офигенного, а?

  • Тот же самый Swift, мать его! Один язык на всё про всё. Захотел модельку данных переиспользовать с айфона на сервер — хуяк, и она уже тут, не надо эту вашу JSON-хуйню вручную разбирать. Бизнес-логика одна на всех, красота.
  • Летит, сука, как угорелый! Внутри у него движок от Apple — SwiftNIO, который не тупит, пока ждёт ответа от базы или сети. Всё асинхронно, всё на событиях, пропускная способность — овердохуища.
  • Всё типобезопасно, как в аптеке! Роуты, запросы, ответы — компилятор тебе всё проверит, не даст лажануться и отправить строку туда, где число нужно. Выразительный синтаксис, читаешь как книжку.
  • Не одинокий волк! Сообщество есть, пакетов на SPM — хоть завались. Fluent для баз данных, куча всего для аутентификации, веб-сокеты — бери и пользуйся, не изобретай велосипед.

Вот смотри, как это выглядит, простейший REST-эндпоинт:

import Vapor

// Конфигурация приложения
let app = try Application()
let router = try app.make(Router.self)

// Определение модели данных (Codable)
struct Todo: Content {
    var id: Int?
    var title: String
}

// Роут для GET запроса на /todos
router.get("todos") { req -> [Todo] in
    // Здесь обычно запрос к базе данных через Fluent
    return [
        Todo(id: 1, title: "Изучить Vapor"),
        Todo(id: 2, title: "Написать API")
    ]
}

// Роут для POST запроса на /todos
router.post(Todo.self, at: "todos") { req, todo -> Todo in
    // Принимаем JSON тело, декодируемое в модель Todo
    // Сохраняем в БД и возвращаем созданный объект
    var newTodo = todo
    newTodo.id = 3 // Генерируем ID
    return newTodo
}

try app.run()

И где это всё, спрашивается, применить можно? Да где угодно, блядь! Делай REST или GraphQL API для своего мобильного приложения. Или целый сайт с серверным рендерингом. Или чат real-time на веб-сокетах. Или микросервисы эти ваши модные. В общем, инструмент, что надо, а не какая-то мартышлюшка.