Бета — версия Vapor 5

—

от автора

Спустя шесть с половиной лет после выхода Vapor 4 и ровно через десять лет после релиза Vapor 1.0. Первый бета-релиз увидел свет ровно через 10 лет после того, как был помечен тегом Vapor 1.0, и после почти 6,5 лет и 306 релизов Vapor 4 я невероятно рад объявить о первом бета-релизе Vapor 5! Работа над Vapor 5 началась более двух лет назад, и с момента выхода первой альфа-версии в июне мы потихоньку работали над альфа-версиями. Теперь, после изменения 49 000 строк кода и завершения всех архитектурных изменений, мы готовы к тому, чтобы больше людей увидели и попробовали новую версию.

Новые возможности

Vapor 5 — это, по сути, полная переработка всего фреймворка. Ключевые изменения включают:

  • Больше никаких EventLoop и EventLoopFuture! Vapor 5 полностью построен на async/await с настоящей поддержкой структурированной конкурентности. Нам даже удалось почти полностью убрать NIO из публичных API; осталось удалить пару ByteBuffer из Multipart и разобраться с некоторой работой NIO, связанной со сжатием и TLS.

  • Совершенно новый HTTP-сервер. Vapor 5 построен на основе Swift HTTP Server — нового современного HTTP-сервера с поддержкой двунаправленной потоковой передачи, HTTP/3 и многого другого. Теперь Vapor может сосредоточиться на том, чтобы быть отличным веб-фреймворком, и передать обработку HTTP новому серверу.

  • Потоковая передача по умолчанию. Тела запросов и ответов в Vapor 5 теперь ориентированы в первую очередь на потоковую передачу, что делает работу с большими файлами и обратным давлением (backpressure) очень простой при отличной эффективности использования памяти. У нас по-прежнему есть много синтаксического сахара сверху, так что если вы работаете с Data или JSON, вы можете легко с ними обращаться. Более того, потоковые замыкания используют Span, что делает их максимально производительными.

  • Поддержка Service Lifecycle. Application в Vapor 5 — это просто Service, что делает интеграцию с более крупными приложениями очень простой. Мы также позволяем передавать другие сервисы в ваше Application и позволяем Vapor управлять жизненным циклом этих сервисов.

  • Поддержка Swift Configuration. Теперь мы используем Swift Configuration для управления конфигурацией Vapor, что упрощает интеграцию с остальной экосистемой Swift.

  • Swift HTTP Types. Наши типы запросов и ответов теперь предоставляют доступ к HTTPTypes, таким как Status, для лучшей интеграции с экосистемой и чтобы сделать HTTP-сервер (и NIO) деталью реализации.

  • Совершенно новая, переписанная библиотека Vapor Testing, которая унифицирует API, предоставляя единый способ тестирования вашего приложения.

  • Поддержка потоковой передачи в Client и VaporTesting.

  • Все флаги SwiftPM! Мы включили почти все возможные флаги, включая InternalImportsByDefault, NonisolatedNonsendingByDefault и .strictMemorySafety(). Это не только гарантирует максимальную безопасность, но и готовит нас к будущему, чтобы справляться с версиями Swift.

  • Новые трейты (traits), которые позволяют легко отключать определённые функции, чтобы уменьшить объём Vapor, который нужно компилировать, использовать и распространять.

  • Новая экспериментальная библиотека макросов. Мы создали новую экспериментальную библиотеку макросов, чтобы помочь вам определять маршруты и контроллеры. Это привносит типобезопасную маршрутизацию и параметры, проверяемую компилятором аутентификацию и более простые определения маршрутов! Этому будет посвящён отдельный пост, и работа над ней всё ещё идёт быстрыми темпами.

Известные проблемы

В Vapor 5 Beta 1 есть несколько известных проблем, в частности поддержка сжатия, которая появится в ближайшее время, и поддержка WebSockets, которая ожидает реализации в HTTP-сервере. Следите за страницей релизов, чтобы узнать, когда они появятся!

Требуется Swift 6.4

Vapor 5 требует Swift 6.4 или более поздней версии (и macOS 26 или более поздней), которая, к счастью, была выпущена только вчера! Это связано с тем, что мы в полной мере используем новые возможности Swift, поддержку fullSpan, а также гарантируем, что многие распространённые ошибки, включая, например, попытку захвата тела запроса, становятся ошибками компиляции.

Vapor 4

Vapor 4 по-прежнему является текущей версией Vapor, но большая часть усилий и разработки новых функций теперь будет происходить в Vapor 5. Однако мы объявим график поддержки ближе к релизу Vapor 5, но будьте уверены, что Vapor 4 будет продолжать получать исправления ошибок и обновления безопасности ещё долго после выхода Vapor 5, а в ближайшее время появится официальная платная расширенная поддержка для тех, кому она нужна.

Попробуйте

Шаблон уже обновлён в ветке vapor5 с поддержкой Fluent при желании. Интеграция с Leaf появится в ближайшее время. Вы можете создать новый проект с помощью:

vapor new MyVapor5App --branch vapor5

Примечание: в настоящее время шаблон напрямую зависит от FluentKit, а часть интеграционной работы выполняется в шаблоне. Вероятно, в будущем это перейдёт в vapor/fluent, как только мы его обновим.

Вы также можете указать в вашем манифесте новый релиз, если у вас есть существующий проект, указав на бета-версию:

.package(url: "https://github.com/vapor/vapor.git", from: "5.0.0-beta.1"),

Мы выпустим руководство по миграции и полную документацию в ближайшие недели. Нам также предстоит много работы со всеми интеграционными пакетами, чтобы упростить внедрение Fluent, JWT, Queues и т.д. Повторюсь, они появятся в ближайшем будущем.

Хотя бета-версии должны быть достаточно стабильными, мы пока не рекомендуем использовать их в production для критически важных сервисов. Тем не менее, нам не терпится узнать, как вы найдёте Vapor 5. Как всегда, если вы обнаружите проблемы, вы можете сообщить о них на GitHub или связаться с нами в Discord.

У нас нет полного графика релиза Vapor 5, так как часть его зависит от зависимостей экосистемы, и мы хотим убедиться, что всё сделаем правильно. Vapor 4 был поддерживаемой версией уже 6,5 лет и продолжает оставаться таковой — мы хотим аналогичного срока жизни для Vapor 5.

Как всегда, мы не смогли бы этого сделать без поддержки сообщества. У нас уже есть множество вкладов от сообщества, и вы можете увидеть список задач на доске проекта, если хотите принять участие. И это было бы невозможно без поддержки наших спонсоров, как из Open Collective, так и из GitHub Sponsors.

Удачной разработки!

ссылка на оригинал статьи https://habr.com/ru/articles/1096952/