Наш первый маршрут с Rocket


Добавление Rocket в наш проект

Что ж, теперь пришло время испачкать руки и добавить наш веб-фреймворк в наш проект. Мы будем использовать Rocket, потому что, на мой взгляд, это самый простой в освоении и применении ящик. Вы также можете проверить actix-web crate, который может быть очень хорошей альтернативой.
Для тех, кто не знаком с концепцией crates, это библиотеки (плагины, пакеты…), которые позволяют расширить функциональные возможности языка без необходимости изобретать колесо.

Если вы используете крейт cargo-edit, вы можете просто ввести cargo add rocket в терминале. В противном случае просто добавьте версию в ваш файл Cargo. Для этой статьи мы будем использовать версию 0.5.0-rc.2. Ваш Cargo.toml теперь должен выглядеть следующим образом:

[package]
name = "web_server"
version = "0.1.0"
edition = "2021"

[dependencies]
rocket = "0.5.0-rc.2"
Войдите в полноэкранный режим Выход из полноэкранного режима

Все готово! Давайте начнем кодировать.

Давайте создадим наш первый маршрут

Настроить веб-сервер в Rust с помощью Rocket очень (очень) просто. Кто сказал, что Rust — это только низкоуровневый язык?

Давайте заменим содержимое нашего main.rs и посмотрим, что произойдет.

#[macro_use]
extern crate rocket;

#[get("/health")]
fn healthcheck() -> &'static str {
    "OK"
}

#[launch]
fn rocket() -> _ {
    rocket::build().mount("/", routes![healthcheck])
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Первые две строки позволяют нам использовать макросы Rocket, такие как get или launch. Вы должны быть знакомы с этим, если вы когда-нибудь занимались Rust. Вы также можете удалить эти строки и импортировать только те макросы, которые вам нужны.

Макрос get превращает нашу простую функцию в конечную точку для нашего API. В качестве параметра он принимает строку, соответствующую пути к нашей конечной точке (обратите внимание, что этот маршрут может иметь префикс, как мы увидим ниже). Очевидно, что это не единственный макрос такого типа, и существуют другие, соответствующие всем HTTP-глаголам.

Обратите внимание, что маршрут может возвращать любой тип, реализующий признак Responder. Он уже реализован для некоторых типов, таких как &str, String или Json, но вы также можете реализовать его для своих собственных типов. Я рекомендую вам перейти на эту страницу, если вы хотите узнать больше о черте Responder и ответах в целом.

Наконец, макрос launch создает главную функцию, которая вызывает функцию launch структуры, возвращенной функцией, к которой применен макрос. В этом случае сгенерированный код будет выглядеть следующим образом:

#[rocket::main]
async fn main() {
    let _ = rocket().launch().await;
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Наконец, что касается самой функции rocket(), то она просто монтирует маршруты, переданные в качестве параметров, с префиксом указанного пути. Обратите внимание, что вполне возможно вызвать функцию mount несколько раз, если мы хотим смонтировать разные маршруты с разными префиксами (у нас будет возможность вернуться к этому позже в этой серии статей).

Теперь мы можем запустить сервер, набрав команду cargo run в терминале, и увидеть следующие строки, говорящие нам об успешном запуске сервера.

Configured for debug.
   >> address: 127.0.0.1
   >> port: 1234
   >> workers: 8
   >> ident: Rocket
   >> limits: bytes = 8KiB, data-form = 2MiB, file = 1MiB, form = 32KiB, json = 1MiB, msgpack = 1MiB, string = 8KiB
   >> temp dir: C:UsersThibautAppDataLocalTemp
   >> http/2: true
   >> keep-alive: 5s
   >> tls: disabled
   >> shutdown: ctrlc = true, force = true, grace = 2s, mercy = 3s
   >> log level: debug
   >> cli colors: true
Routes:
   >> (healthcheck) GET /health
Fairings:
   >> Shield (liftoff, response, singleton)
registering event source with poller: token=Token(0), interests=READABLE | WRITABLE
Shield:
   >> X-Frame-Options: SAMEORIGIN
   >> Permissions-Policy: interest-cohort=()
   >> X-Content-Type-Options: nosniff
Rocket has launched from http://127.0.0.1:1234
Войдите в полноэкранный режим Выход из полноэкранного режима

Перейдите в браузере по указанному адресу (не забыв добавить путь к нашей конечной точке), и вы должны увидеть желаемое содержимое, которое будет «OK».

Изменение конфигурации с помощью файла Rocket.toml

Может быть, вы хотите настроить свой сервер Rocket на работу на другом порту, с более высоким или низким уровнем журнала или изменить количество рабочих? Возможно, вы также хотите иметь различные конфигурации в зависимости от среды, в которой развернуто приложение? Хорошая новость, для этого существует файл Rocket.toml.

В этом файле вы можете указать, как запустить ваш сервер и настроить его по профилю. Вы также можете иметь конфигурации по умолчанию или, наоборот, конфигурации, перезаписывающие все остальные значения.

Вот пример конфигурации. Все доступные поля можно найти в документации.

[debug]
address = "127.0.0.1"
port = 1234
log_level = "debug"
Войдите в полноэкранный режим Выход из полноэкранного режима

В следующей статье мы сделаем еще один шаг вперед и добавим систему аутентификации на наш сервер!

Оцените статью
devanswers.ru
Добавить комментарий