CLI (Command Line Interfaces) ključan je u razvoju softvera i administraciji sustava. CLI-ovi su lagani tekstualni programi koji nude pojednostavljen način interakcije s računalima koji su pogodni za programere i napredne korisnike za višestruke slučajeve upotrebe, uključujući automatizaciju, skriptiranje i daljinsku administraciju.
Rust postaje sve popularniji za izradu CLI aplikacija. Rust pruža moćne značajke kao što je fina kontrola nad dodjelom memorije i sigurnošću niti, sigurnošću memorije, konkurentnošću i paralelizmom koje možete iskoristiti za izradu moćnih CLI aplikacija. Rust se također može pohvaliti uspješnim ekosustavom biblioteka i okvira koji su eksplicitno skrojeni za izgradnju CLI aplikacija.
Početak izrade CLI aplikacija s Rustom
Postoji nekoliko paketa trećih strana za izradu CLI aplikacija u Rustu, uključujući Pljesnuti, StructOpti Termion sanduke. Ovi sanduci pružaju značajke koje su vam potrebne za razvoj modernih CLI alata.
Također, Rust pruža a std::env sanduk u svojoj standardnoj biblioteci koja pruža funkcionalnost za rad s varijablama okruženja i argumentima naredbenog retka. The std::env sanduk nudi niz metoda i vrsta za rad s okruženjima na način neovisan o platformi.
Koristiti std::env sanduk, vaši Rust programi mogu komunicirati s okruženjem i prilagoditi svoje ponašanje na temelju različitih čimbenika, uključujući varijable okruženja, argumente naredbenog retka i trenutni radni direktorij.
Pokrenite ovu naredbu za stvaranje novog Rust projekta za vašu CLI aplikaciju s Cargom, Rustovim alatom za upravljanje paketima:
cargo new crypto_cli
Naučit ćete kako izraditi CLI aplikaciju koja poziva Coinmarketcapov API s Reqwest sanduk koji pruža značajke za izradu HTTP zahtjeva u Rustu.
Otvori svoju Teret.toml datoteku i dodajte reqwest i tokio kutije u ovisnosti vašeg projekta:
[dependencies]
tokio = { version = "1.15", features = ["full"] }
reqwest = { version = "0.11", features = ["json"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
The tokio sanduk je asinkrona knjižnica za vrijeme izvođenja koja interoperira s reqwest za asinkrono programiranje. The serde i serde_json sanduci pomažu kod JSON serijalizacije i deserijalizacije.
u src mapu vašeg Rust projekta, kreirajte api.rs i cli.rs datoteke u kojima ćete implementirati API poziv i CLI funkcionalnosti.
touch src/api.rs src/cli.rs
Naredba bi trebala stvoriti željene datoteke u radnom direktoriju vašeg projekta. Nakon što upišete funkcije u njihove određene datoteke za odvajanje problema, pozvati ćete funkcije u glavni funkcija u vašem glavni.rs datoteka.
Upućivanje API zahtjeva za CoinMarketCap API s Reqwestom
API CoinMarketCapa omogućuje vam pristup i integraciju podataka o kriptovaluti u njihove aplikacije. API pruža krajnje točke za popise, tržišne kotacije, informacije o razmjeni, alate za konverziju, povijesne podatke i metapodatke.
Kada se prijavite, možete se prijaviti za CoinMarketCap račun i dohvatiti svoj API ključ na Coinmarketcapovoj stranici za razvojne programere. Također možete pogledati dokumentaciju za detaljne upute i ograničenja stope.
Za upućivanje API zahtjeva na /v2/cryptocurrency/quotes/latest krajnja točka koja vraća najnoviju tržišnu kotaciju za jednu ili više kriptovaluta, morat ćete definirati strukture za podatke koje želite izdvojiti iz API-ja i odrediti atribute sa Serdeovom značajkom izvođenja.
Zatim možete zatražiti API do krajnje točke i koristiti serde_json sanduk za deserijalizaciju JSON podataka u strukturu za lakše operacije na Rust tipovima podataka.
Ovdje je definicija strukture koja dohvaća iskaznica, Ime, simbol, i citat podatke o navedenim kriptovalutama
#[derive(Debug, Deserialize, Serialize)]
struct ApiResponse {
data: Data,
}#[derive(Debug, Deserialize, Serialize)]
struct Data {
#[serde(rename = "1")]
crypto_1: Cryptocurrency,
#[serde(rename = "2")]
crypto_2: Cryptocurrency,
#[serde(rename = "3")]
crypto_3: Cryptocurrency,
#[serde(rename = "4")]
crypto_4: Cryptocurrency,
}
#[derive(Debug, Deserialize, Serialize)]
struct Cryptocurrency {
id: u32,
name: String,
symbol: String,
quote: Quote,
}
#[derive(Debug, Deserialize, Serialize)]
struct Quote {
USD: QuoteDetails,
}
#[derive(Debug, Deserialize, Serialize)]
struct QuoteDetails {
price: f64,
volume_24h: f64,
}
API vraća podatke koji mogu biti više nego što vam je potrebno, ali s serde sanduk, možete navesti točne podatke koji su vam potrebni, kao što je prikazano gore.
Sada možete zatražiti krajnju točku s Reqwestom stvaranjem novog klijenta koji šalje GET zahtjev sa potrebnim parametrima.
use reqwest::Client;
use reqwest::Error;pub async fn crypto() -> Result<(), Error> {
let client = Client::new();
let url = "https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest";
let params = [
("id", "1,2,3,4"),
("convert", "USD"),
];
let response = client.get(url)
.header("X-CMC_PRO_API_KEY", "YOUR API KEY HERE")
.query(¶ms)
.send().await?;
;
let result: ApiResponse = serde_json::from_str(&*response.text().await?;).unwrap();
println!("{:#?}", result);
Ok(())
}
The kripto funkcija je asinkrona funkcija omogućena za Tokio koja zahtijeva krajnju točku s klijent.dobiti funkciju nakon stvaranja klijentske instance s Klijent::novo metoda.
The Zaglavlje poziv funkcije na instanci graditelja zahtjeva uzima vaš API ključ, upit funkcija preuzima parametre, a poslati funkcija šalje zahtjev.
The kripto funkcija deserijalizira JSON odgovor sa serde_json-om from_str metoda koja uzima JSON niz.
Konačno, kripto funkcija ispisuje rezultat operacije deserijalizacije na konzolu.
Dohvaćanje CLI argumenata u Rustu
U vašem cli.rs datoteku, uvest ćete kripto funkcija iz api.rs datoteku i pozovite funkciju ako korisnik unese “crypto” kao argument za pokretanje projekta s vožnja tereta naredba.
Evo kako možete koristiti std::env funkcija za dohvaćanje argumenta iz naredbenog retka:
use std::env;
use crate::api::crypto;pub async fn cli() {
let args: Vec<String> = env::args().collect();
if args.len() > 1 && args[1] == "crypto" {
crypto().await.unwrap();
} else {
println!("Invalid command. Usage: cargo run crypto");
}
}
The cli funkcija dohvaća sve argumente iz naredbenog retka s env::args().collect() funkcija. The ako-drugače naredba provjerava postoji li dodatni argument, “crypto”. Ako uvjet procjenjuje istinito, cli funkcija poziva kripto funkcija; inače, cli funkcija ispisuje niz na konzolu.
Konačno, možete nazvati cli funkcija u glavni funkcija. Morate dodati #[tokio::main] atribut jer glavni funkcije ne mogu biti asinkrone u Rustu.
mod api;
mod cli;
use crate::cli::cli;#[tokio::main]
async fn main() {
cli().await;
}
The glavni funkcija poziva cli funkcija s čekati funkcija koja obustavlja izvršenje do rezultata a Budućnost je spreman.
Ovo je rezultat pokretanja cargo run kripto naredba:
Možete izraditi sofisticirane web aplikacije u Rustu
Rust je svestran programski jezik s mnogo slučajeva upotrebe i aplikacija. Možete iskoristiti web okvire trećih strana kao što su Actix, Rocket i Warp za izradu web aplikacija u Rustu. Ti okviri pružaju većinu funkcija potrebnih za izradu modernih web-aplikacija.







