녹슨 웹 API 얻기🦀
우리는 무엇을 짓고 있습니까?
이 자습서에서는 CLI 애플리케이션을 구축합니다.프로그램을 실행하고 회사 기호라는 매개 변수를 지정할 것입니다.예를 들어
cargo run AAPL
은 애플 주식의 가격을 제시할 것이다.이 프로젝트에서 Finnhub API를 사용할 예정입니다. 완전 무료입니다.우리 머리를 찔러 넣자!우리의 프로젝트를 세우다
새 Rust 프로젝트를 만들고 가장 좋아하는 코드 편집기에서 엽니다. (제 것은 VS코드입니다.)
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"]
보시다시피 우리가 관심 있는 값은 벡터의 두 번째 요소나 색인 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으로 변환합니다.?
연산자의 의미는 unwrap
과 같다.마지막으로, 우리는 Ok로 돌아왔는데, 결과는 안에 있었다.우선, 주요 기능에 앞서
#[tokio::main]
에 배치하겠습니다.이것은 우리가 주요 기능에서wait를 사용할 수 있다는 것을 의미한다.주 함수 끝에서 회사 견적을 가져오고 기호와 API 키를 매개 변수로 전달합니다.우리는 회답을 기다리고 (println!
宏을 사용하여) 현재 주가를 인쇄한다.그리고 우리는 Ok
으로 돌아와 모든 것이 계획대로 진행되고 있음을 나타냈다.너는 아마도 async와 await가 무슨 뜻이라고 생각할 것이다.
비동기식/대기
이 절에서 나는
async
과 await
을 간략하게 소개할 것이다.비동기식 - 대기 가능
대기 - 명령이 실행될 때까지 기다린 다음 다음 다음 명령을 계속합니다
왜 우리는 명령 집행을 기다려야 합니까?
웹 API를 가져오는 데 시간이 좀 걸릴 것이라고 상상할 수 있습니다.만약 우리가 데이터를 얻기를 기다리지 않고 응답을 처리하지 않는다면 (예를 들어 이를 JSON으로 바꾸는 것), 결과는 미래이기 때문에 (데이터를 얻기를 기다리는 것) 오류가 발생할 것이다.Rust의 async/await에 대한 자세한 내용은 을 참조하십시오.
실행 코드
cargo run {the company symbol you want the stock price of}
을 실행해서 코드를 실행합시다. (나는 cargo run TSLA
을 실행했습니다.)보시다시피 그것은 효과적입니다(주가는 본문을 작성할 때입니다)!TSLA's current stock price: 826.16
나는 당신이 녹슨 API를 어떻게 얻는지 배웠고, async와 Wait에 대해 대체적으로 이해하기를 바랍니다.더 많은 녹슨 튜토리얼이 곧 발표됩니다!마지막 코드는 GitHub에 있습니다.읽어주셔서 감사합니다!헨리 보이스 김 / 주식
회사의 현재 주가를 제공하는 간단한 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.)