Создайте свой первый API с помощью Rust

Rust — популярный язык программирования (как вы знаете, я написал несколько статей о нем), но для новичков может быть сложно найти проекты для него или даже иметь сильное понимание.
Создание чего-то полезного — это фантастический подход для начала работы с любым языком.

Я часто думал о том, что Rust может быть мощным бэкендом для API, некоторые причины включают:
-Rust — очень быстрый язык и может обрабатывать большое количество одновременных запросов.
-Rust очень надежен, и сбои случаются редко.

Поэтому я искал фреймворк для создания API, я нашел rocket, есть много руководств по созданию API с помощью Rocket, подключенного к базе данных, но они немного сложнее для тех, кто только начинает изучать Rust.

Построение простого REST API — шаг за шагом.

Мы собираемся построить простой API для цен на криптовалюты. Для этого мы будем использовать фреймворк Rocket и «Reqwest» для отправки HTTP-запросов в наш внутренний API. Вот следующие шаги, которые необходимо выполнить:

  • Запустите веб-сервер .
  • Прослушать запросы .
  • Если приходит запрос, посмотрите на Path в заголовке HTTP.
  • Отправьте запрос в backend API с помощью reqwest.-Отправьте ответ обратно отправителю.

Установка Rust Nightly

Мы должны установить nightly, потому что Rocket широко использует расширения синтаксиса Rust и другие продвинутые, нестабильные возможности.

rustup default nightly

Создайте новый проект cargo new SimpleAPI .

Зависимости


[dependencies]
rocket = "0.4.11"
rocket_codegen = "0.4.4"
http = "0.2"
reqwest = { version = "0.11", features = ["blocking"] }

Что такое Rocket

Rocket — это веб-фреймворк для Rust, который упрощает написание быстрых веб-приложений без ущерба для гибкости и безопасности типов.

Цель Rocket — сделать веб-разработку быстрой, простой и безопасной. Это достигается благодаря уникальному дизайну, который фокусируется на обработке запросов без статических данных, композитном промежуточном программном обеспечении и декларативном подходе к подбору маршрутов.

Такой дизайн делает Rocket невероятно простым в использовании и понимании. Его также легко расширять и настраивать под свои нужды.
Мы хотим создать посадочную страницу с небольшой информацией об этом API.

Для этого мы создадим первый маршрут, при этом мы используем специальный макрос перед функцией конечной точки. Этот макрос описывает метод маршрута и его путь.
Метод возвращает ссылку на ‘str’.

#[get("/")]
fn index() -> &'static str {
    "Navigate to http://localhost:8000/check/<type your Coin> to check  details about this crypto  !"
}

Вход в полноэкранный режим Выйти из полноэкранного режима

Второй маршрут также слушает GET-запрос, полный путь для этой конечной точки — : «/check/coin», где coin — вводимое пользователем значение. В этот раз мы обратимся к другому API, чтобы получить цену для текущей криптовалюты.
Функция «check» получает параметр «coin» в качестве параметра, который является своего рода строкой, затем функция возвращает «Result». Согласно книге Rust lang:

Result — это тип, используемый для возврата и распространения ошибок. Это перечисление с вариантами Ok(T), представляющим успех и содержащим значение, и Err(E), представляющим ошибку и содержащим значение ошибки.

В теле функции мы будем использовать «reqwest» для отправки HTTP-запроса с помощью Rust.

Крейт reqwest предоставляет удобный HTTP-клиент более высокого уровня. Он выполняет многие вещи, которые большинство людей просто ожидают, что HTTP-клиент сделает за них.
В документации сказано, что «reqwest::blocking» более удобен для приложений, которые делают только несколько HTTP-запросов.

Сначала мы делаем формат строки с выбранной монетой и URL API coingecko, после этого мы отправляем запрос, и если он не прошел, мы вернем «Ok», что означает успех.
Если ответ успешный, мы отправляем ответ отправителю: Ok(format!("{} ", resp.text().unwrap())).

#[get("/check/<coin>")]
fn check(coin: &RawStr) -> Result<String, Box<dyn std::error::Error>> {
    let request_url =format!("https://api.coingecko.com/api/v3/coins/{}", coin);
    println!("{}", request_url);
    let resp = reqwest::blocking::get(request_url)?;
    if resp.status().is_success(){

        `Ok(format!("{} ", resp.text().unwrap()))`
    }
    else{
        let response = resp.text().unwrap();
        Ok(format!("{} is not a coin!", response))
    }
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Последняя функция — «Main», она монтирует все маршруты по пути / (обратите внимание, что берется имя функции, а не путь маршрута), и запускает приложение.

fn main() {
    rocket::ignite().mount("/", routes![index, check]).launch();
}

Вход в полноэкранный режим Выход из полноэкранного режима

Скомпилируйте и запустите программу с помощью команды cargo run. Вы должны увидеть следующее:

Наконец, результат выглядит так: :

Я знаю! Мы получили только большие данные JSON и цена не разобрана. В следующей статье я расскажу, как работать с JSON и мы будем использовать больше функциональности фреймворка «Reqwest».

Если вы еще не знаете, что мы только что запустились, проверьте нас на www.blstsecurity.com 😉

Присоединяйтесь к нашему серверу Discord, где мы говорим о Rust и API: https://discord.gg/3ThF8NYd.

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