1 个不稳定版本

0.1.0 2024年5月13日

#25 in #aerospace

MIT 许可证

50KB
1.5K SLoC

Space Track

Space-Track.org API 的简单封装。

使用方法

use space_track::{Config, Credentials, Direction, LaunchSiteField, SpaceTrack};

async fn main() -> Result<(), Box<dyn Error>> {
  let mut space_tracker = SpaceTrack::new(Credentials {
      identity: "[email protected]".to_string(),
      password: "my-password".to_string(),
  });

  // get first 10 launch sites, sorted by the site code in descending order
  let launch_sites = space_track
      .launch_site(
          Config::new()
              .limit(10)
              .offset(0)
              .order_by(LaunchSiteField::SiteCode, Direction::Descending)
              .distinct(),
      )
      .await?;

  for launch_site in launch_sites {
      println!("Launch site code: {}", launch_site.site_code);
  }
}

Space-Track 网站获取凭据。请尊重 API 文档中 描述的 API 使用指南。

API

完整的 API 文档可以在 Space-Track.org 网站 上找到。

每个方法名都映射到文档中的 "请求类"

let decay = space_track.decay(Config::new()).await?;

配置对象包含对 API 调用的额外配置,例如限制、偏移、排序。默认情况下,它使用 100 个限制创建,这是一个有意的设计决策,以防止对 API 的不必要负载。

空配置

有一个 empty 配置构造函数,它没有限制。请谨慎使用。

let decay = space_track.decay(Config::empty()).await?;

每个方法都有一个 all_ 前缀版本,它不需要配置,并使用一个空配置创建。以下代码与上述代码等价

let decay = space_track.all_decay().await?;

配置

配置对象遵循构建器模式,并具有以下属性

  • limit - 要检索的记录数
  • offset - 要跳过的记录数
  • order_by - 排序的字段和方向
  • distinct - 布尔值,指示是否返回不同的记录
Config::new()
  .limit(10)
  .offset(0)
  .order_by(LaunchSiteField::SiteCode, Direction::Descending)
  .distinct()

为什么 mut?

简而言之,实例无缝保存和刷新其凭据,但代价是每个方法都可能潜在地修改自身。

它做什么

认证

Space Track API 的认证是通过登录到网站并使用生成的cookie来完成的,这大约持续2小时。在封装中,如果没有cookie或cookie已过期,则该认证无缝发生。

cookie 存储在 SpaceTrack 实例中,因此每次请求时都可能需要刷新cookie。这就是为什么实例上的每个调用都可能潜在地修改自身的原因。权衡是所有事情都在幕后发生,但实例必须是可变的,这可能在使用多个借用的实例时令人烦恼。

未来的计划是有一个只使用关联函数的封装版本,但其中cookie必须由用户管理。

反序列化

包装器处理反序列化,这听起来并不复杂,直到你查看API返回的响应:所有的“数字”都是字符串,很多字段未标记为可选,但实际上是可选的,大小写都是大写,有些单词写成一行,有些字段是enum(Y, N),这些已经被转换为布尔值等。所有这些都已处理,使得API返回的结构体看起来和感觉都很正常。

日期目前保持不变。API模型定义中定义的数字往往不反映现实,因此目前数字类型已经定义为安全侧,但计划进一步细化。

贡献

我是一个Rust新手,所以可能有很多我未意识到的明显问题。对于这样的通用改进,请随时提交一个pull请求。

有几个方面需要改进(例如,加强数字类型)。这些改进的进度将在GitHub问题中跟踪。如果您想做出贡献,请随时查看那里。

许可证

根据您的选择,在Apache许可证,版本2.0MIT许可证下获得许可。

除非您明确声明,否则您提交给此crate的任何有意贡献,根据Apache-2.0许可证的定义,将根据上述方式双重许可,不附加任何额外条款或条件。

依赖项

~4–18MB
~213K SLoC