1 个不稳定版本
0.1.0 | 2024年5月13日 |
---|
#25 in #aerospace
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.0或MIT许可证下获得许可。
除非您明确声明,否则您提交给此crate的任何有意贡献,根据Apache-2.0许可证的定义,将根据上述方式双重许可,不附加任何额外条款或条件。
依赖项
~4–18MB
~213K SLoC