Rust je jedan od najboljih izbora za izradu CLI aplikacija. Započnite izgradnjom osnovne aplikacije za dohvaćanje kripto podataka.
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 koja su povoljna za programere i napredne korisnike za višestruke slučajeve upotrebe, uključujući automatizaciju, skriptiranje i daljinsko korištenje uprave.
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, StructOpt, i 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 okolinom i prilagoditi svoje ponašanje na temelju razne čimbenike, uključujući varijable okruženja, argumente naredbenog retka i trenutni rad imenik.
Pokrenite ovu naredbu za stvaranje novog Rust projekta za vašu CLI aplikaciju s Cargom, Rustovim alatom za upravljanje paketima:
teret novi crypto_cli
Naučit ćete kako izraditi CLI aplikaciju koja poziva Coinmarketcapov API s Reqwest sanduk koji pruža značajke za izradu HTTP zahtjevi u Rustu.
Otvori svoju Teret.toml datoteku i dodajte reqwest i tokio kutije ovisnosti vašeg projekta:
[ovisnosti]
tokio = { verzija = "1.15", karakteristike = ["pun"] }
reqwest = { verzija = "0.11", karakteristike = ["json"] }
serde = { verzija = "1.0", karakteristike = ["izvesti"] }
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 pomoći s JSON serijalizacija i deserijalizacija.
u src mapu vašeg Rust projekta, kreirajte api.rs i cli.rs datoteke u kojima ćete implementirati API poziv i CLI funkcije.
dodir src/api.rs src/cli.rs
Naredba bi trebala stvoriti željene datoteke u radnom direktoriju vašeg projekta. Nakon što napiš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
CoinMarketCap API 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 stranici razvojnog programera Coinmarketcapa. Također možete pogledati dokumentaciju za detaljne upute i ograničenja stope.
Za upućivanje API zahtjeva na /v2/cryptocurrency/quotes/latest krajnju točku koja vraća najnoviju tržišnu kotaciju za jednu ili više kriptovaluta, morat ćete definirati strukture za podatke koje želite izvući iz API-ja i navedite 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.
Evo definicija strukture koji vraća iskaznica, Ime, simbol, i citat podatke o navedenim kriptovalutama
#[derive (Debug, Deserialize, Serialize)]
strukturiratiApiResponse {
podaci: podaci,
}#[derive (Debug, Deserialize, Serialize)]
strukturiratiPodaci {
// Dodajte polja koja su vam potrebna iz podatkovnog objekta
#[serde (preimenuj = "1")]
crypto_1: kriptovaluta,#[serde (preimenuj = "2")]
crypto_2: kriptovaluta,#[serde (preimenuj = "3")]
crypto_3: kriptovaluta,#[serde (preimenuj = "4")]
crypto_4: kriptovaluta,
}#[derive (Debug, Deserialize, Serialize)]
strukturiratiKriptovaluta {
iskaznica: u32,
Ime: Niz,
simbol: Niz,
// Dodajte ostala polja po potrebi
Citat: Citat,
}#[derive (Debug, Deserialize, Serialize)]
strukturiratiCitat {
USD: QuoteDetails,
}
#[derive (Debug, Deserialize, Serialize)]
strukturiratiQuoteDetails {
cijena: f64,
volumen_24h: f64,
// Dodajte ostala polja po potrebi
}
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.
koristiti reqwest:: klijent;
koristiti reqwest:: Greška;pubasinkronifnkripto() -> Proizlaziti {
neka klijent = Klijent:: novi();neka url = " https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest";
neka parametri = [
("iskaznica", "1,2,3,4"),
("Pretvoriti", "USD"), // Pretvorite tržišne vrijednosti u USD
];neka odgovor = client.get (url)
.Zaglavlje("X-CMC_PRO_API_KEY", "VAŠ API KLJUČ OVDJE")
.upit(¶metri)
.poslati().čekati?;
;neka rezultat: ApiResponse = serde_json:: from_str(&*response.text().čekati?;).razmotati();
println!("{:#?}", rezultat);
U redu(())
}
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:
koristiti std:: env;
koristiti sanduk:: api:: kripto;pubasinkronifncli() {
neka args: Vec<Niz> = env:: args().collect();
ako args.len() > 1 && argumenti[1] == "kripto" {
kripto().čekati.razmotati();
} drugo {
println!("Nevažeća naredba. Upotreba: cargo run kripto");
}
}
The cli funkcija dohvaća sve argumente iz naredbenog retka s env:: args().collect() funkcija. The ako-drugače izjava 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:: glavni] atribut jer glavni funkcije ne mogu biti asinkrone u Rustu.
mod api;
mod cli;
koristiti sanduk:: cli:: cli;
#[tokio:: glavni]
asinkronifnglavni() {
cli().čekati;
}
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.