Rust è una delle migliori scelte per la creazione di applicazioni CLI. Inizia creando un'applicazione di base per il recupero di dati crittografici.

La CLI (Command Line Interfaces) è fondamentale nello sviluppo del software e nell'amministrazione del sistema. Le CLI sono programmi leggeri basati su testo che offrono un modo semplificato per interagire con i computer favorevoli per sviluppatori e utenti esperti per molteplici casi d'uso, tra cui automazione, scripting e remoto amministrazione.

Rust sta guadagnando popolarità per la creazione di app CLI. Rust fornisce potenti funzionalità come il controllo granulare sull'allocazione della memoria e la sicurezza dei thread, la sicurezza della memoria, la concorrenza e il parallelismo che puoi sfruttare per creare potenti app CLI. Rust vanta anche un fiorente ecosistema di librerie e framework su misura esplicitamente per la creazione di applicazioni CLI.

Iniziare a creare app CLI con Rust

Esistono diversi pacchetti di terze parti per la creazione di app CLI in Rust, incluso

instagram viewer
Batti le mani, StructOpt, E Termine casse. Questi crate forniscono le funzionalità necessarie per sviluppare moderni strumenti CLI.

Inoltre, Rust fornisce un std:: avv crate nella sua libreria standard che fornisce funzionalità per lavorare con le variabili di ambiente e gli argomenti della riga di comando. IL std:: avv crate offre una gamma di metodi e tipi per lavorare con gli ambienti in modo indipendente dalla piattaforma.

Usando il std:: avv crate, i tuoi programmi Rust possono interagire con l'ambiente e adattare il loro comportamento in base a vari fattori, comprese le variabili di ambiente, gli argomenti della riga di comando e il funzionamento corrente directory.

Esegui questo comando per creare un nuovo progetto Rust per la tua app CLI con Cargo, lo strumento di gestione dei pacchetti di Rust:

carico nuovo crypto_cli

Imparerai come creare un'applicazione CLI che chiama l'API di Coinmarketcap con il Richiesto cassa che fornisce funzionalità per la realizzazione Richieste HTTP in Rust.

Apri i tuoi Cargo.toml file e aggiungi il file reqwest E tokio casse alle dipendenze del tuo progetto:

[dipendenze]
tokio = { versione = "1.15", caratteristiche = ["pieno"] }
reqwest = { versione = "0.11", caratteristiche = ["json"] }
serde = { versione = "1.0", caratteristiche = ["derivare"] }
serde_json = "1.0"

IL tokio crate è una libreria di runtime asincrona che interagisce con reqwest per la programmazione asincrona. IL serde E serde_json le casse aiutano con Serializzazione e deserializzazione JSON.

Nel src cartella del tuo progetto Rust, crea api.rs E cli.rs file in cui implementerai la chiamata API e le funzionalità CLI.

tocca src/api.rs src/cli.rs

Il comando dovrebbe creare i file desiderati nella directory di lavoro del tuo progetto. Dopo aver scritto le funzionalità nei loro file designati per la separazione delle preoccupazioni, chiamerai le funzioni nel file principale funzione nel tuo principale.rs file.

Effettuare richieste API all'API di CoinMarketCap con Reqwest

L'API di CoinMarketCap ti consente di accedere e integrare i dati di criptovaluta nelle loro applicazioni. L'API fornisce endpoint per elenchi, quotazioni di mercato, informazioni di scambio, strumenti di conversione, dati storici e metadati.

Quando accedi, puoi registrarti per un account CoinMarketCap e recuperare la tua chiave API sulla pagina dello sviluppatore di Coinmarketcap. È inoltre possibile fare riferimento alla documentazione per istruzioni dettagliate e limiti di tariffa.

Per effettuare una richiesta API al /v2/cryptocurrency/quotes/latest endpoint che restituisce l'ultima quotazione di mercato per una o più criptovalute, dovrai definire il struct per i dati che vuoi estrarre dall'API e specifica gli attributi con il tratto derivato di Serde.

Quindi puoi richiedere un'API all'endpoint e utilizzare il serde_json crate per deserializzare i dati JSON nella struct per semplificare le operazioni sui tipi di dati Rust.

Ecco il definizione di struttura che recupera il id, nome, simbolo, E citazione dati delle criptovalute specificate

#[derive (Debug, Deserializza, Serializza)]
structApiResponse {
dati: dati,
}

#[derive (Debug, Deserializza, Serializza)]
structDati {
// Aggiungi i campi di cui hai bisogno dall'oggetto dati
#[serde (rinomina = "1")]
crypto_1: criptovaluta,

#[serde (rinomina = "2")]
crypto_2: criptovaluta,

#[serde (rinomina = "3")]
crypto_3: criptovaluta,

#[serde (rinomina = "4")]
crypto_4: criptovaluta,
}

#[derive (Debug, Deserializza, Serializza)]
structCriptovaluta {
id: u32,
nome: Corda,
simbolo: Corda,
// Aggiungi altri campi se necessario
citazione: citazione,
}

#[derive (Debug, Deserializza, Serializza)]
structCitazione {
USD: QuotazioneDettagli,
}

#[derive (Debug, Deserializza, Serializza)]
structQuotaDettagli {
prezzo: f64,
volume_24h: f64,
// Aggiungi altri campi se necessario
}

L'API restituisce dati che potrebbero essere più del necessario, ma con l'estensione serde crate, puoi specificare i dati esatti di cui hai bisogno, come mostrato sopra.

Ora puoi richiedere l'endpoint con Reqwest creando un nuovo client che effettua la richiesta GET con i parametri richiesti.

utilizzo reqwest:: Cliente;
utilizzo reqwest:: Errore;

pubasincronofncripto() -> Risultato {
permettere cliente = Cliente:: new();

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

permettere parametri = [
("id", "1,2,3,4"),
("convertire", "DOLLARO STATUNITENSE"), // Converti i valori di mercato in USD
];

permettere risposta = client.get (url)
.intestazione("X-CMC_PRO_API_KEY", "LA TUA CHIAVE API QUI")
.query(&parametri)
.Inviare().attendere?;
;

permettere risultato: ApiResponse = serde_json:: from_str(&*response.text().attendere?;).scartare();

stampa!("{:#?}", risultato);
OK(())
}

IL cripto La funzione è una funzione asincrona abilitata per tokio che richiede l'endpoint con il client.get funzione dopo aver creato un'istanza client con il Cliente:: nuovo metodo.

IL intestazione la chiamata di funzione sull'istanza del generatore di richieste accetta la tua chiave API, the domanda la funzione accetta i parametri e il file Inviare la funzione invia la richiesta.

IL cripto La funzione deserializza la risposta JSON con serde_json da_str metodo che accetta una stringa JSON.

Infine il cripto La funzione stampa il risultato dell'operazione di deserializzazione sulla console.

Recuperare argomenti CLI in Rust

Nel tuo cli.rs file, importerai il file cripto funzione dal api.rs file e chiama la funzione se l'utente specifica "crypto" come argomento durante l'esecuzione del progetto con l'estensione corsa del carico comando.

Ecco come puoi usare il std:: avv funzione per recuperare l'argomento dalla riga di comando:

utilizzo std:: env;
utilizzo crate:: api:: crypto;

pubasincronofncli() {
permettere argomenti: Vec<Corda> = env:: args().collect();

Se args.len() > 1 && argomenti[1] == "cripto" {
cripto().attendere.scartare();
} altro {
stampa!("Comando non valido. Utilizzo: criptovaluta per il carico");
}
}

IL cli La funzione recupera tutti gli argomenti dalla riga di comando con il env:: args().collect() funzione. IL se altro controlla se c'è un argomento aggiuntivo, "crypto". Se il condizionale restituisce vero, il cli funzione chiama il cripto funzione; in caso contrario, il cli la funzione stampa una stringa sulla console.

Infine, puoi chiamare il cli funzione nel principale funzione. Devi aggiungere il #[tokio:: principale] attributo da allora principale le funzioni non possono essere asincrone in Rust.

mod API;
mod cli;
utilizzo cassa:: cli:: cli;

#[tokio:: principale]
asincronofnprincipale() {
cli().attendere;
}

IL principale funzione chiama il cli funzione con il attendere funzione che sospende l'esecuzione fino al risultato di a Futuro è pronta.

Ecco il risultato dell'esecuzione del file criptovaluta per la corsa del carico comando:

Puoi creare app Web sofisticate in Rust

Rust è un linguaggio di programmazione versatile con molti casi d'uso e applicazioni. Puoi sfruttare framework web di terze parti come Actix, Rocket e Warp per creare applicazioni web in Rust. Questi framework forniscono la maggior parte delle funzionalità necessarie per creare app Web moderne.