Привет! Не нравится лимит статей на 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. ;)