さびでウェブAPIをフェッチする方法🦀
このチュートリアルでは、Rubyで非同期的にWeb APIを取得する方法を教えます.このチュートリアルでは、さびの基礎を知っている錆をインストールしている開発者のためのものであり、錆の非同期プログラミングについて学びたいです.インストールされていない場合は、ここでダウンロードできます.https://www.rust-lang.org/tools/install .
このチュートリアルでは、我々はCLI株式アプリを構築するためにやっている.プログラムを実行し、引数を指定します.例えば、
新しいRustプロジェクトを作成し、お気に入りのコードエディタで開きましょう.
まず、ユーザが通過する引数を取得しましょう.標準ライブラリのenvモジュールを使用して行うことができます.あなた
まず、メイン関数の前に、次のようにします.
あなたは、何を意味しますか?
このセクションでは、私はあなたの簡単な概要を与える
async -待機することを許可します
wait -次のコマンドに移動する前に実行するコマンドを待つ
なぜコマンドを実行するのを待つ必要があるのですか?
あなたが想像できるようにWeb APIを取得するいくつかの時間がかかります.データがフェッチされるのを待たずに、レスポンスを持って何かをするならば、結果は将来(データを取得するのを待ちます)であるので、エラーを得るでしょう.また、ここではAsync/Waitを読んでください.
実行してコードを実行しましょう
ストックCLI
私たちは何を建てていますか。
このチュートリアルでは、我々はCLI株式アプリを構築するためにやっている.プログラムを実行し、引数を指定します.例えば、
cargo run AAPL
アップル株の値段をあげる.我々は完全に無料ですこのプロジェクトのFinnHub APIを使用するつもりです.右に飛び込みましょう!プロジェクトの設定
新しいRustプロジェクトを作成し、お気に入りのコードエディタで開きましょう.
cargo new stock-cli
cd stock-cli/
プロジェクトは次のようになります.├── Cargo.toml
└── src
└── main.rs
依存関係のセクションの下でこれを入力して依存関係をインストールしましょうCargo.toml
. あなたCargo.toml
次のようになります.[package]
name = "stock-cli"
version = "0.1.0"
authors = ["Your Name"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
structopt = "0.3.21"
exitfailure = "0.5.1"
reqwest = { version = "0.11.0", features = ["json"] }
serde = "1.0.119"
serde_json = "1.0.61"
serde_derive = "1.0.119"
tokio = { version = "1.0.2", features = ["full"] }
これらの依存関係がどうなっているか説明します.次に、APIキーが必要です.移動するhttps://finnhub.io/register
アカウントを作成します.一度サイン入りしてくださいhttps://finnhub.io/dashboard
そして、あなたはAPIキーを見るべきです.このプロジェクトを開いてください.それのように、コーディングに入りましょう!プロジェクトのコーディング
まず、ユーザが通過する引数を取得しましょう.標準ライブラリのenvモジュールを使用して行うことができます.あなた
src/main.rs
次のようになります.use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
println!("{:?}", args);
}
このコードでは、標準ライブラリのenvモジュールをインポートしますargs()
関数を収集し、デバッグ形式で出力する{:?}
値をデバッグする方法).このコマンドを実行すると、cargo run AAPL
, を受信します.["target/debug/stock-cli", "AAPL"]
ご覧のように、我々が興味を持っている値は、ベクトルの第2の要素またはインデックス1のベクトル(Rustは0指数)です.ユーザが引数を入力しないシナリオを扱いましょう.src/main.rs
use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
let mut company: String = "AAPL".to_string();
if args.len() < 2 {
println!("Since you didn't specify a company symbol, it is defaulted to AAPL.");
} else {
company = args[1].clone();
}
println!("{:?}", company);
}
ご覧のように、ユーザーが会社のシンボルを入力しない場合、デフォルトはaaplです.さもなければ、会社は彼らが指定した引数です.引数なしでプログラムを実行すると、まだ動作します.cargo run
Since you didn't specify a company symbol, it has defaulted to AAPL.
"AAPL"
さて、finnhub APIを取得しましょう.使用しているAPIエンドポイントは/quote これは現在の株価といくつかの他の詳細を返します.src/main.rs
use exitfailure::ExitFailure;
use reqwest::Url;
use serde_derive::{Deserialize, Serialize};
use std::env;
#[derive(Serialize, Deserialize, Debug)]
struct CompanyQuote {
c: f64,
h: f64,
l: f64,
o: f64,
pc: f64,
t: i128,
}
impl CompanyQuote {
async fn get(symbol: &String, api_key: &String) -> Result<Self, ExitFailure> {
let url = format!(
"https://finnhub.io/api/v1/quote?symbol={}&token={}",
symbol, api_key
);
let url = Url::parse(&*url)?;
let res = reqwest::get(url).await?.json::<CompanyQuote>().await?;
Ok(res)
}
}
#[tokio::main]
async fn main() -> Result<(), ExitFailure> {
let api_key = "YOUR API KEY".to_string();
let args: Vec<String> = env::args().collect();
let mut symbol: String = "AAPL".to_string();
if args.len() < 2 {
println!("Since you didn't specify a company symbol, it has defaulted to AAPL.");
} else {
symbol = args[1].clone();
}
let res = CompanyQuote::get(&symbol, &api_key).await?;
println!("{}'s current stock price: {}", symbol, res.c);
Ok(())
}
「APIキー」をダッシュボードのAPIキーで置き換えるようにしてください.このコードでは、構造体CompanyQuote
. の実装でCompanyQuote
, 非同期関数get
を返します.CompanyQuote
またはエラーです.この関数は、会社シンボルとAPIキーをパラメータとして期待します.まず、シンボルとAPIキーを含むURLを書式設定します.次に、URLを解析し、reqwestモジュールを使って取得します.我々は応答を待っているし、JSONにそれを回す.The ?
演算子はunwrap
. 最後に、結果の中でOKを返しています.まず、メイン関数の前に、次のようにします.
#[tokio::main]
. それは、我々が我々の主な機能で待つことができることを意味します.主な機能の終わりに向かって、我々は会社の引用を得て、パラメータとしてシンボルとAPIキーを渡しています.我々は応答を待ってからprintln!
マクロは、現在の株価を出力します.その後、我々はOk
すべてが計画通りに行ったと言うこと.あなたは、何を意味しますか?
非同期/待機
このセクションでは、私はあなたの簡単な概要を与える
async
and await
.async -待機することを許可します
wait -次のコマンドに移動する前に実行するコマンドを待つ
なぜコマンドを実行するのを待つ必要があるのですか?
あなたが想像できるようにWeb APIを取得するいくつかの時間がかかります.データがフェッチされるのを待たずに、レスポンスを持って何かをするならば、結果は将来(データを取得するのを待ちます)であるので、エラーを得るでしょう.また、ここではAsync/Waitを読んでください.
コードの実行
実行してコードを実行しましょう
cargo run {the company symbol you want the stock price of}
私はcargo run TSLA
). ご存知のように、この記事を書いている時の株価です!TSLA's current stock price: 826.16
私はどのようにRustでAPIを取得する方法を学び、Asyncの一般的な理解を持って待ってほしい.その他の錆チュートリアルすぐに来る!最後のコードはgithubです.読書ありがとう!ヘンリボシリデキン / ストックCLI
あなたの会社の現在の株価を与える単純なCLIアプリ。
ストックCLI
CLIのアプリは、会社の現在の株式を取得する指定された.
のために
View on GitHub
ヘンリー
📰 Newsletter
🐱 GitHub
Reference
この問題について(さびでウェブAPIをフェッチする方法🦀), 我々は、より多くの情報をここで見つけました
https://dev.to/hb/how-to-fetch-a-web-api-with-rust-1390
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(さびでウェブAPIをフェッチする方法🦀), 我々は、より多くの情報をここで見つけました https://dev.to/hb/how-to-fetch-a-web-api-with-rust-1390テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol