Rust is een van de beste keuzes voor het bouwen van CLI-applicaties. Ga aan de slag door een eenvoudige toepassing voor het ophalen van cryptogegevens te bouwen.

CLI (Command Line Interfaces) is cruciaal bij softwareontwikkeling en systeembeheer. CLI's zijn lichtgewicht op tekst gebaseerde programma's die een gestroomlijnde manier bieden om met computers te communiceren die gunstig zijn voor zowel ontwikkelaars als ervaren gebruikers voor meerdere gebruiksscenario's, waaronder automatisering, scripting en op afstand administratie.

Rust wint aan populariteit voor het bouwen van CLI-apps. Rust biedt krachtige functies zoals fijnmazige controle over geheugentoewijzing en threadveiligheid, geheugenveiligheid, gelijktijdigheid en parallellisme die u kunt gebruiken om krachtige CLI-apps te bouwen. Rust kan ook bogen op een bloeiend ecosysteem van bibliotheken en frameworks die expliciet zijn toegesneden op het bouwen van CLI-applicaties.

Aan de slag CLI-apps bouwen met Rust

Er zijn verschillende pakketten van derden voor het bouwen van CLI-apps in Rust, waaronder

instagram viewer
Klap, StructOpt, En Termijn kratten. Deze kratten bieden de functies die u nodig hebt om moderne CLI-tools te ontwikkelen.

Rust biedt ook een standaard:: env krat in zijn standaardbibliotheek die functionaliteit biedt voor het werken met omgevingsvariabelen en opdrachtregelargumenten. De standaard:: env krat biedt een scala aan methoden en typen om platformonafhankelijk met omgevingen te werken.

De... gebruiken standaard:: env krat, je Rust-programma's kunnen communiceren met de omgeving en hun gedrag aanpassen op basis van verschillende factoren, waaronder omgevingsvariabelen, opdrachtregelargumenten en de huidige werking map.

Voer deze opdracht uit om een ​​nieuw Rust-project voor uw CLI-app te maken met Cargo, de pakketbeheertool van Rust:

lading nieuwe crypto_cli

Je leert hoe je een CLI-applicatie bouwt die de API van Coinmarketcap aanroept met de Verzoek krat die functies biedt om te maken HTTP-verzoeken in Rust.

Open je Cargo.toml bestand en voeg de verzoek En Tokio kratten naar de afhankelijkheden van uw project:

[afhankelijkheden]
Tokio = { versie = "1.15", kenmerken = ["vol"] }
verzoek = { versie = "0.11", kenmerken = ["json"] }
serde = { versie = "1.0", kenmerken = ["afleiden"] }
serde_json = "1.0"

De Tokio krat is een asynchrone runtime-bibliotheek die samenwerkt met verzoek voor asynchrone programmering. De serde En serde_json kratten helpen daarbij JSON-serialisatie en deserialisatie.

In de src map van je Rust-project, create api.rs En kl.rs bestanden waarin u de API-aanroep en CLI-functionaliteiten implementeert.

tik op src/api.rs src/cli.rs

De opdracht zou de gewenste bestanden in de werkmap van uw project moeten maken. Nadat u de functionaliteiten in hun aangewezen bestanden hebt geschreven om zorgen te scheiden, roept u de functies in de voornaamst functie in uw hoofd.rs bestand.

API-verzoeken doen aan de API van CoinMarketCap met Reqwest

API van CoinMarketCap stelt u in staat om cryptocurrency-gegevens te openen en te integreren in hun applicaties. De API biedt eindpunten voor vermeldingen, marktnoteringen, uitwisselingsinformatie, conversietools, historische gegevens en metadata.

Wanneer u zich aanmeldt, kunt u zich aanmelden voor een CoinMarketCap-account en uw API-sleutel ophalen op de ontwikkelaarspagina van Coinmarketcap. U kunt ook de documentatie raadplegen voor gedetailleerde instructies en tarieflimieten.

Om een ​​API-verzoek te doen aan de /v2/cryptocurrency/quotes/latest eindpunt dat de laatste marktquote voor een of meer cryptocurrencies retourneert, moet u de structs voor de gegevens die u uit de API wilt halen en specificeer de attributen met Serde's afgeleide eigenschap.

Vervolgens kunt u een API aanvragen bij het eindpunt en de serde_json krat om de JSON-gegevens in de structuur te deserialiseren voor eenvoudigere bewerkingen op Rust-gegevenstypen.

Hier is de structuur definitie dat haalt de ID kaart, naam, symbool, En citaat gegevens van de gespecificeerde cryptocurrencies

#[afleiden (foutopsporing, deserialiseren, serialiseren)]
structuurAPIResponse {
gegevens: gegevens,
}

#[afleiden (foutopsporing, deserialiseren, serialiseren)]
structuurGegevens {
// Voeg velden toe die u nodig heeft uit het gegevensobject
#[serde (hernoemen = "1")]
crypto_1: cryptocurrency,

#[serde (hernoemen = "2")]
crypto_2: cryptocurrency,

#[serde (hernoemen = "3")]
crypto_3: cryptocurrency,

#[serde (hernoemen = "4")]
crypto_4: cryptocurrency,
}

#[afleiden (foutopsporing, deserialiseren, serialiseren)]
structuurCryptovaluta {
ID kaart: u32,
naam: Snaar,
symbool: Snaar,
// Voeg indien nodig andere velden toe
citaat: citaat,
}

#[afleiden (foutopsporing, deserialiseren, serialiseren)]
structuurCitaat {
USD: QuoteDetails,
}

#[afleiden (foutopsporing, deserialiseren, serialiseren)]
structuurQuoteDetails {
prijs: f64,
volume_24u: f64,
// Voeg indien nodig andere velden toe
}

De API retourneert gegevens die mogelijk meer zijn dan u nodig heeft, maar met de serde krat, kunt u de exacte gegevens opgeven die u nodig heeft, zoals hierboven weergegeven.

Nu kunt u het eindpunt aanvragen met Reqwest door een nieuwe client te maken die het GET-verzoek met de vereiste parameters doet.

gebruik verzoek:: opdrachtgever;
gebruik verzoek:: Fout;

kroegasynchroonfncryptovaluta() -> Resultaat {
laten klant = klant:: nieuw();

laten URL = " https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest";

laten parameters = [
("ID kaart", "1,2,3,4"),
("overzetten", "AMERIKAANSE DOLLAR"), // Converteer marktwaarden naar USD
];

laten reactie = client.get (url)
.kop("X-CMC_PRO_API_KEY", "JE API-SLEUTEL HIER")
.query(&parameters)
.versturen().wachten?;
;

laten resultaat: ApiResponse = serde_json:: from_str(&*response.text().wachten?;).uitpakken();

println!("{:#?}", resultaat);
OK(())
}

De cryptovaluta function is een tokio-enabled asynchrone functie die het eindpunt aanvraagt ​​met de klant.krijgen functie na het maken van een clientinstantie met de Klant:: nieuw methode.

De koptekst functieaanroep op de request builder-instantie neemt uw API-sleutel op, de vraag functie neemt de parameters op, en de versturen functie verzendt het verzoek.

De cryptovaluta functie deserialiseert het JSON-antwoord met serde_json's van_str methode die een JSON-tekenreeks opneemt.

eindelijk, de cryptovaluta functie drukt het resultaat van de deserialisatiebewerking af naar de console.

CLI-argumenten ophalen in Rust

In uw kl.rs bestand, importeert u het cryptovaluta functie uit de api.rs -bestand en roep de functie aan als de gebruiker "crypto" invoert als argument voor het uitvoeren van het project met de vracht rennen commando.

Hier ziet u hoe u de standaard:: env functie om het argument van de opdrachtregel op te halen:

gebruik standaard:: env;
gebruik krat:: api:: crypto;

kroegasynchroonfnkli() {
laten argumenten: Vec<Snaar> = env:: args().collect();

als args.len() > 1 && argumenten[1] == "crypto" {
krypto().wachten.uitpakken();
} anders {
println!("Ongeldig commando. Gebruik: vrachtvlucht crypto");
}
}

De kli functie haalt alle argumenten op van de opdrachtregel met de env:: args().collect() functie. De als-anders statement controleert of er een extra argument is, "crypto". Als de voorwaardelijke waarde waar oplevert, wordt de kli functie roept de cryptovaluta functie; anders de kli functie drukt een string af naar de console.

Tot slot kunt u bellen met de kli functie in de voornaamst functie. U moet de toevoegen #[tokio:: hoofd] attribuut sinds voornaamst functies kunnen niet asynchroon zijn in Rust.

mod API;
mod cli;
gebruik krat:: cli:: cli;

#[tokio:: hoofd]
asynchroonfnvoornaamst() {
cli().wachten;
}

De voornaamst functie roept de kli functie met de wachten functie die de uitvoering opschort tot het resultaat van a Toekomst is gereed.

Hier is het resultaat van het uitvoeren van de vrachtloop crypto commando:

U kunt geavanceerde web-apps bouwen in Rust

Rust is een veelzijdige programmeertaal met veel use cases en toepassingen. U kunt webframeworks van derden, zoals Actix, Rocket en Warp, gebruiken om webapplicaties in Rust te bouwen. Deze frameworks bieden de meeste functionaliteiten die nodig zijn om moderne webapps te bouwen.