Привет! Не нравится лимит статей на Medium? Прочтите этот пост в моем блоге! https://tahar.dev/posts/2021/20210326-actix-rs-a-newbies-perspective/

В наши дни язык программирования Rust кажется везде, где бы вы ни находились. Фактически, язык Rust был признан сообществом одним из самых любимых языков в Опросе разработчиков StackOverflow 2020 года!

Я часто склонен держаться подальше от шумихи и новых языков, но количество инженеров, восхваляющих Rust, значительно выросло за эти годы. Так много, что я просто должен был проверить это сам!

Моя повседневная работа в основном связана с написанием бэкендов с использованием .NET или Spring Boot. Я решил придерживаться этого домена и попробовать написать простой веб-сервер на Rust самостоятельно.

Я буду использовать Actix.rs для написания веб-сервера, потому что он выглядит как один из наиболее зрелых фреймворков в веб-экосистеме Rust. Документация надежная, и сообщество Rust вполне положительно относится к ее возможностям.

Обратите внимание, что я совсем не опытный программист на Rust. Тем не менее, я думаю, что этот недостаток знаний позволяет мне по-новому взглянуть на то, насколько сложно новичку было бы перейти с Java или C# на Rust.

Здравствуйте, Actix.rs!

Примерно через десять минут мне удалось запустить и запустить мой самый первый веб-сервер на Rust. Я мог перейти к localhost:8080 и увидеть приветственное сообщение. Это немного, но это начало!

В этот момент я понял, что мне понадобится много времени, чтобы изучить все особенности и особенности платформы Actix.rs. Он не такой обширный, как фреймворк Spring Boot, но, тем не менее, в нем есть кое-что. Поскольку я склонен отказываться от побочных проектов через некоторое время, я решил поставить перед собой очень четкие и краткие цели для этого проекта, чтобы гарантировать, что я смогу закончить его в разумные сроки.

  • Не используйте настоящую базу данных, просто используйте массивы в памяти.
  • GET конечная точка, в которой перечислены все данные в базе данных.
  • Конечная точка POST для добавления новых записей в базу данных.
  • УДАЛИТЬ конечную точку, чтобы удалить записи из базы данных.
  • ОБНОВИТЬ конечную точку для изменения существующих записей в базе данных.
  • Разместите очень простой веб-сайт, который связывает все вместе.

Обслуживание статических файлов

Одна из вещей, на которую у меня ушло немало времени, это то, как я могу обслуживать статические файлы. Обычно я просто помещал свой файл index.html в папку resources и позволял Spring Boot позаботиться об этом.

Оказалось, что мне пришлось самому обслуживать файлы. Это не очень сложно, но я сначала не совсем понял. Однако после того, как я обнаружил, что функция actix_files::Files::new() может просто обслуживать весь каталог, мне удалось нормально обслуживать мои статические файлы (вместе с некоторыми CSS). Документация была превосходной, так что в конце концов было довольно легко разобраться.

Обработчик ошибки 404 — это просто общая HTML-страница с некоторой информацией. Вот как я реализовал свой:

Как только я узнал, как обслуживать статические файлы, мне не потребовалось много времени, чтобы понять, как обслуживать веб-сайт React.js. Имея все это на месте, я мог приступить к созданию конечных точек и выборке данных с сервера.

Обработка полезных нагрузок

В Spring Boot довольно легко работать с пейлоадами. Как правило, вам нужно только добавить некоторые аннотации к вашему маршруту, чтобы он заработал.

В Actix.rs все работает немного иначе. Текст можно получить непосредственно из тела ответа, просто добавив его в качестве параметра функции.

Переменные пути можно получить, указав их в объявлении маршрута и заключив их в объект web::Path<T> в качестве параметра функции.

Обработка полезных данных JSON с помощью Actix.rs также не была слишком сложной. Используя крейт Serde.rs, мы можем легко сериализовать и десериализовать данные.

Окончательный вердикт

В целом, несмотря на то, что я поигрался с Actix.rs всего несколько часов, я бы сказал, что он меня очень впечатлил. Было довольно легко настроить и запустить веб-сервер, документация была превосходной, и в целом простота использования была хорошей.

Мое незнание самого языка программирования Rust действительно сдерживало меня. Мне казалось, что я не совсем понимаю средство проверки заимствований, а также разные строки и тому подобное. Однако поиск Google не может ничего исправить!

Кроме того, работа с Cargo была потрясающей. Это так же просто и удобно, как NuGet. Мне очень нравится, как легко брать ящики.

Единственное, что меня беспокоит в Rust, это отсутствие инструментов отладки. Конечно, есть расширения, которые позаботятся об этом (и расширение Visual Studio Code — это хорошо), но это далеко не тот уровень отладки, который я могу выполнить в IntelliJ или Visual Studio. Отладка в Visual Studio Code еще не совсем реализована…

Но эй, в целом, я действительно хорошо провел время, и я определенно хочу поиграть с Rust в будущем.

Кто знает, возможно, мне удастся убедить членов моей команды позволить мне написать один из микросервисов на Rust вместо Java. ;)