#launch #rest-client #rocket #client #rest #api-client #api-wrapper

rocket_launch_live

围绕 RocketLaunch.Live API 的类型安全且异步的包装器

4个版本

0.1.3 2023年9月26日
0.1.2 2023年9月26日
0.1.1 2023年9月24日
0.1.0 2023年9月24日

#14 in #launch

MIT/Apache

31KB
565

Rocket Launch Live

围绕 RocketLaunch.Live API 的类型安全且异步的包装器。

rocket_launch_live 允许您轻松地将代码异步集成到 RocketLaunch.Live API。无需处理底层细节,用户可以使用高级接口实例化一个客户端,并使用有效的API密钥。

设计

RocketLaunchLive 是主要结构,包含每个端点的方法。JSON数据被反序列化为在 api_models 模块中定义的有意义的模型类型。对端点方法的每次调用都会返回一个 Response<T>,它对 T 是通用的,允许定制响应。根据您调用的方法,响应包含类型为 Vec<T> 的结果字段,其中 T 可以是类型 api_models::Companyapi_models::Launchapi_models::Locationapi_models::Missionapi_models::Padapi_models::Tagapi_models::Vehicle

此REST API通过以下端点提供对不断增长的精选火箭发射数据的访问

  • 公司
  • 发射
  • 位置
  • 任务
  • 垫片
  • 标签
  • 车辆

示例

use rocket_launch_live::api_models::{Launch, Response};
use rocket_launch_live::{Direction, LaunchParamsBuilder, NaiveDate, RocketLaunchLive};
use std::{env, error::Error};

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // Read the API key from an environment variable.
    let api_key = env::var("RLL_API_KEY")?;

    // Create an instance of RocketLaunchLive to access the API.
    let client = RocketLaunchLive::new(&api_key);

    // Create an instance of LaunchParamsBuilder.
    // Set some parameters to filter out the launches we're interested in.
    let params = LaunchParamsBuilder::new()
        .country_code("US")
        .after_date(NaiveDate::from_ymd_opt(2023, 9, 1))?
        .search("ISS")
        .direction(Direction::Descending)
        .limit(10)
        .build();

    // Call the launches endpoint method with the parameters set above.
    // This returns a Response from the API server asynchronously.
    // Generic type annotations since each endpoint has a specific response.
    let resp: Response<Launch> = client.launches(Some(params)).await?;

    // Iterate over the the result field of the Response.
    for launch in resp.result {
        println!(
            "{} | {} | {}",
            launch.date_str, launch.vehicle.name, launch.name
        );
    }

    Ok(())
}

依赖项

~7-22MB
~300K SLoC