녹슨 웹 API 얻기🦀

이 자습서에서는 Rust에서 비동기적으로 웹 API를 가져오는 방법에 대해 설명합니다.이 강좌는 Rust의 기초 지식을 이해하고 Rust가 설치되어 있으며 Rust에서 비동기 프로그래밍을 알고 싶은 개발자를 대상으로 한다.만약 당신이 Rust를 설치하지 않았다면, 당신은 여기에서 다운로드할 수 있습니다: https://www.rust-lang.org/tools/install.

우리는 무엇을 짓고 있습니까?


이 자습서에서는 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가 무슨 뜻이라고 생각할 것이다.

비동기식/대기


이 절에서 나는 asyncawait을 간략하게 소개할 것이다.
비동기식 - 대기 가능
대기 - 명령이 실행될 때까지 기다린 다음 다음 다음 명령을 계속합니다
왜 우리는 명령 집행을 기다려야 합니까?
웹 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

좋은 웹페이지 즐겨찾기