ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SpaceX-API 单颗 Starlink 卫星查询接口详解:GET /v4/starlink/:id 的请求、响应与底层实现

SpaceX-API 单颗 Starlink 卫星查询接口详解:GET /v4/starlink/:id 的请求、响应与底层实现 后端API设计【免费下载链接】SpaceX-API:rocket: Open Source REST API for SpaceX launch, rocket, core, capsule, starlink, launchpad, and landing pad data.项目地址https://gitcode.com/gh_mirrors/spa/SpaceX-API点击查看免费下载本篇技术指南以 SpaceX-API 开源仓库中 docs/starlink/v4/one.md 文档为核心完整讲解通过GET /v4/starlink/:id获取单颗 Starlink 卫星轨道与实时位置信息的接口规范包括请求参数、成功/失败响应、spaceTrack轨道数据字段语义并结合仓库源码路由、Mongoose 模型、数据同步任务深入剖析该接口的数据来源与实现原理。读完本文你将能独立完成该接口的请求构造、响应解析并理解 Starlink 数据在 SpaceX-API 中从 Space Track 拉取、经 TLE 计算位置、再落库提供查询的完整链路。一、接口概览方法与端点one.md文档对单颗卫星查询接口给出了如下权威定义项目值MethodGETURLhttps://api.spacexdata.com/v4/starlink/:idURL Parametersid[string]即目标 Starlink 卫星的 IDMongoDB ObjectId 形式如5eed7716096e590006985825Auth requiredFalse公开只读接口无需 API Key其中:id对应的是文档内部唯一 ID而非北美防空司令部NORAD编号。在源码层面该路由在 routes/starlink/v4/index.js 中定义路由前缀同时兼容v4与latest两个版本别名const router new Router({ prefix: /(v4|latest)/starlink, });因此https://api.spacexdata.com/v4/starlink/:id与https://api.spacexdata.com/latest/starlink/:id均可访问同一接口。仓库文档 docs/README.md 说明latest是固定到最新版本的别名适合愿意接受潜在破坏性变更的调用方。实际请求示例以下是一个可以直接执行的curl命令使用文档响应示例中的真实 IDcurl https://api.spacexdata.com/v4/starlink/5eed7716096e590006985825服务端在 routes/starlink/v4/index.js#L21-L28 中通过 Mongoose 的findById按主键精确查询router.get(/:id, cache(3600), async (ctx) { const result await Starlink.findById(ctx.params.id); if (!result) { ctx.throw(404); } ctx.status 200; ctx.body result; });实现要点使用findById等价于findOne({ _id: ctx.params.id })命中即返回完整文档查询结果为空时抛出404由 middleware/errors.js 统一转换为Not Found响应中间件cache(3600)表示该响应在 Redis 中缓存3600 秒1 小时与 docs/README.md 中Starlink 轨道数据每小时更新的数据节奏保持一致详见 middleware/cache.js 的 TTL 实现。二、成功响应200 OK完整响应示例与逐字段解析文档给出的成功响应内容如下这是单颗卫星返回的完整 JSON 结构可直接作为解析代码的字段依据{ spaceTrack: { CCSDS_OMM_VERS: 2.0, COMMENT: GENERATED VIA SPACE-TRACK.ORG API, CREATION_DATE: 2020-06-19 21:46:09, ORIGINATOR: 18 SPCS, OBJECT_NAME: STARLINK-1506, OBJECT_ID: 2020-038T, CENTER_NAME: EARTH, REF_FRAME: TEME, TIME_SYSTEM: UTC, MEAN_ELEMENT_THEORY: SGP4, EPOCH: 2020-06-19 20:00:01.000224, MEAN_MOTION: 15.88829743, ECCENTRICITY: 0.0087515, INCLINATION: 53.002, RA_OF_ASC_NODE: 266.3302, ARG_OF_PERICENTER: 69.9474, MEAN_ANOMALY: 221.4733, EPHEMERIS_TYPE: 0, CLASSIFICATION_TYPE: U, NORAD_CAT_ID: 45747, ELEMENT_SET_NO: 999, REV_AT_EPOCH: 212, BSTAR: 0.01007, MEAN_MOTION_DOT: 0.03503094, MEAN_MOTION_DDOT: 0.01265, SEMIMAJOR_AXIS: 6683.699, PERIOD: 90.632, APOAPSIS: 364.057, PERIAPSIS: 247.072, OBJECT_TYPE: PAYLOAD, RCS_SIZE: null, COUNTRY_CODE: US, LAUNCH_DATE: 2020-06-13, SITE: AFETR, DECAY_DATE: null, DECAYED: 0, FILE: 2768947, GP_ID: 155985688, TLE_LINE0: 0 STARLINK-1506, TLE_LINE1: 1 45747U 20038T 20171.83334491 .03503094 12654-1 10068-1 0 9995, TLE_LINE2: 2 45747 53.0017 266.3302 0087515 69.9474 221.4733 15.88829743 2124 }, version: v1.0, launch: 5eb87d46ffd86e000604b389, longitude: 165.93047730624068, latitude: -52.91311434465077, height_km: 446.61936740361125, velocity_kms: 7.643507427834188, id: 5eed7716096e590006985825 }顶层字段响应体由两部分组成spaceTrack轨道数据子对象与一组顶层字段。顶层字段语义如下字段类型说明versionStringStarlink 卫星批次版本如v0.9、v1.0、prototype未确定时为nulllaunchString (ObjectId)关联的发射记录 ID指向 launches 集合用于关联发射详情longitudeNumber卫星当前经度由 TLE 实时计算未计算时为nulllatitudeNumber卫星当前纬度同上height_kmNumber卫星当前高度公里velocity_kmsNumber卫星当前速度公里/秒idString该卫星在数据库中的唯一文档 IDspaceTrack 子对象空间轨道数据ODMspaceTrack是对 Space Trackspace-track.org轨道数据的完整透传字段名沿用 CCSDS 轨道数据消息Orbit Data Message标准docs/README.md 中注明该数据遵循 CCSDS 502.0-B 规范。按功能可分为以下几组标识与来源类字段示例值含义CCSDS_OMM_VERS2.0CCSDS OMM 版本号COMMENTGENERATED VIA SPACE-TRACK.ORG API生成注释CREATION_DATE2020-06-19 21:46:09数据创建时间ORIGINATOR18 SPCS数据源机构美国太空司令部第 18 空间防御中队OBJECT_NAMESTARLINK-1506卫星名称OBJECT_ID2020-038T国际标识符发射年份-序号-字母OBJECT_TYPEPAYLOAD物体类型COUNTRY_CODEUS所属国家代码SITEAFETR发射场代码东靶场LAUNCH_DATE2020-06-13发射日期NORAD_CAT_ID45747NORAD 编目号坐标系与历元类字段含义CENTER_NAME中心天体EARTHREF_FRAME参考坐标系TEME真赤道平春分点坐标系TLE 的标准坐标框架TIME_SYSTEM时间系统UTCMEAN_ELEMENT_THEORY平均根数理论SGP4两行根数标准传播模型EPOCH根数历元时间轨道六根数Keplerian elements类字段示例值含义MEAN_MOTION15.88829743平运动圈/天ECCENTRICITY0.0087515偏心率INCLINATION53.002轨道倾角度RA_OF_ASC_NODE266.3302升交点赤经度ARG_OF_PERICENTER69.9474近地点幅角度MEAN_ANOMALY221.4733平近点角度派生轨道量与摄动类字段示例值含义EPHEMERIS_TYPE0星历表类型CLASSIFICATION_TYPEU密级分类U 公开ELEMENT_SET_NO999根数组编号REV_AT_EPOCH212历元时已运行的圈数BSTAR0.01007大气阻力/BSTAR 摄动系数MEAN_MOTION_DOT0.03503094平运动一阶导数MEAN_MOTION_DDOT0.01265平运动二阶导数SEMIMAJOR_AXIS6683.699半长轴公里PERIOD90.632轨道周期分钟APOAPSIS364.057远地点高度公里PERIAPSIS247.072近地点高度公里生命周期与原始 TLE 类字段示例值含义DECAY_DATEnull再入衰减日期未再入时为nullDECAYED0是否已再入0/1RCS_SIZEnull雷达散射截面等级如LARGE未分类时为nullFILE2768947数据文件编号GP_ID155985688轨道根数通用集 IDTLE_LINE0/TLE_LINE1/TLE_LINE2—原始两行根数TLE三行文本可直接用于 SGP4 传播计算以上所有字段的类型与默认值均在 models/starlink.js 的 Mongoose Schema 与 docs/starlink/v4/schema.md 中有完整定义——所有字段默认值均为null说明轨道数据并非每条记录都完整例如未分类卫星的RCS_SIZE、在轨卫星的DECAY_DATE。三、错误响应404 Not Found文档对错误场景给出的定义Code404 NOT FOUNDContentNot Found触发场景为传入不存在的 ID如伪造的 ID、已被删除的记录或格式错误的 ObjectId。对应源码中findById返回null后ctx.throw(404)的分支routes/starlink/v4/index.js#L22-L25。可以按以下方式实测验证# 返回 404 Not Found curl -i https://api.spacexdata.com/v4/starlink/000000000000000000000000另外在 docs/starlink/v4/query.md 中可以看到同集合的查询接口错误响应为400 Bad RequestMongoose 会返回带修复建议的错误信息可作对照单条查询的典型错误是 404资源不存在批量查询的典型错误是 400查询语法不合法。四、数据从何而来Space Track 同步与 TLE 位置计算单颗卫星接口返回的longitude、latitude、height_km、velocity_kms并非数据库静态存储的常量而是由后台定时任务基于 TLE 实时计算得出。核心逻辑位于 jobs/starlink.js其执行链路为登录 Space Track使用SPACEX_TRACK_LOGIN/SPACEX_TRACK_PASSWORD环境变量通过got向space-track.org的/ajaxauth/login发起表单登录并通过CookieJar维护会话拉取全部 Starlink/Tintin 卫星根数请求class/gp通用根数接口过滤OBJECT_NAME匹配/starlink|tintin/i的卫星Tintin 为早期技术验证星也被纳入反查发射记录以卫星的LAUNCH_DATE为圆心、按天构造moment-range调用本 API 自身的/launches/query接口查询当天发射用于填充launch关联字段与推导version计算实时位置对于尚未再入DECAY_DATE为空的卫星取 TLE 两行根数调用tle.js的getSatelliteInfo()计算纬度、经度、高度与速度let position; if (!(sat.DECAY_DATE)) { const tle [sat.TLE_LINE1, sat.TLE_LINE2]; try { position await getSatelliteInfo(tle); } catch (error) { console.log(error); } } // ... longitude: position?.lng ?? null, latitude: position?.lat ?? null, height_km: position?.height ?? null, velocity_kms: position?.velocity ?? null,注意计算失败或卫星已再入时位置字段会回退为null这正是 schema 中这些字段默认值null的实际来源回写数据库通过本 API 内部受保护的PATCH /v4/starlink/:norad_id路由按spaceTrack.NORAD_CAT_ID匹配配合upsert: true实现不存在则创建批量写入。版本号version的推导规则也值得留意starlinkVersion函数优先从任务名中正则匹配v\d{1,3}.\d{1,3}如Starlink-12 v0.9否则按发射日期推断——晚于2019-11-11为v1.0晚于2019-05-24为v0.9晚于2018-02-22为prototype。这解释了为什么不同卫星文档如one.md中的v1.0与query.md示例中的v0.9版本值不同。五、源码对照路由、模型与关联字段5.1 Mongoose 模型与文档模式models/starlink.js 定义了与 docs/starlink/v4/schema.md 完全一致的 Schema顶层version/longitude/latitude/height_km/velocity_kms均为Number或String类型且默认null其中launch被建模为launch: { type: mongoose.ObjectId, ref: Launch, default: null, },即launch是对Launch 集合的外键引用这也是文档响应中launch: 5eb87d46ffd86e000604b389看起来像 UUID 的原因——它实际是 MongoDB 的 ObjectId 字符串形式。模型还启用了mongoosePaginate支撑/query分页与mongoose-id将_id映射为id两个插件因此单条响应中主键以id而非_id呈现。5.2 路由挂载与接口家族routes/starlink/index.js 将 v4 路由注册为唯一版本入口。同一路由文件中还定义了本集合的完整接口家族routes/starlink/v4/index.js方法路径认证说明GET/v4/starlink否返回全部卫星见 docs/starlink/v4/all.mdGET/v4/starlink/:id否本文主题单颗卫星查询POST/v4/starlink/query否条件查询 分页见 docs/starlink/v4/query.mdPOST/v4/starlink是starlink:create创建记录PATCH/v4/starlink/:norad_id是starlink:update按 NORAD 编号更新同步任务内部使用DELETE/v4/starlink/:id是starlink:delete删除记录注意区分两个不同 IDGET /:id使用数据库 ObjectId而PATCH /:norad_id使用 NORAD 编号两者不能混用。5.3 与查询接口的配合使用单条查询接口最常见的实战场景是先用 POST /v4/starlink/query 按条件检索如筛选特定 NORAD 编号、未再入卫星再对结果中的id逐个调用本文接口获取完整详情。查询接口支持 MongoDB 查询语法与populate例如将launch引用直接展开为完整发射对象{ query: { spaceTrack.DECAYED: 0 }, options: { populate: [launch], limit: 5 } }分页返回结构与参数含义详见 docs/queries.mdselect、sort、offset、page、limit、pagination、populate等选项均适用。若只想拿卫星 ID 列表可配合select: id减小响应体积。六、缓存与调用建议本文接口与 Starlink 家族其他 GET/query 接口一样通过 middleware/cache.js 接入 Redis 缓存仅在生产环境NODE_ENVproduction生效缓存 key 由BLAKE3对method url body哈希生成命中时返回spacex-api-cache: HIT响应头。对本文接口而言 TTL 为 3600 秒routes/starlink/v4/index.js#L21与 docs/README.md 中Starlink 数据每小时更新的说明一致——频繁轮询同一卫星的实时位置应把本地缓存/降频策略对齐到 1 小时间隔避免无意义地重复请求。实际集成时的几条建议先查后取不确定 ID 时先用POST /v4/starlink/query或GET /v4/starlink获取 id 列表再按需拉取详情避免猜测 ObjectId校验返回longitude/latitude等位置字段可能为null卫星已再入或 TLE 计算失败消费方应做空值兜底利用spaceTrack.NORAD_CAT_ID若你的数据源以 NORAD 编号为主键可通过查询接口的spaceTrack.NORAD_CAT_ID字段做映射再回查单条详情善用关联字段launch字段可在 query 接口中用populate展开减少对 launches 接口的额外请求。七、小结GET /v4/starlink/:id是 SpaceX-API 提供的 Starlink 卫星数据查询入口之一其响应同时包含两类信息由 Space Track 每日更新并透传的 CCSDS 标准轨道根数spaceTrack以及基于 TLE 实时计算的在轨位置经纬度、高度、速度与发射关联version、launch。通过 routes/starlink/v4/index.js、models/starlink.js 与 jobs/starlink.js 三份源码可以完整还原外部拉取 → 位置计算 → 内部回写 → 缓存提供查询的数据闭环。对开发者而言掌握该接口的响应结构、字段语义与数据新鲜度特性即可在卫星追踪、星链网络监测等场景中快速、准确地消费这批数据。赞分享后端API设计【免费下载链接】SpaceX-API:rocket: Open Source REST API for SpaceX launch, rocket, core, capsule, starlink, launchpad, and landing pad data.项目地址https://gitcode.com/gh_mirrors/spa/SpaceX-API点击查看免费下载相关推荐SpaceX-API Starlink 卫星查询接口实战v4/starlink/query 请求构建、分页机制与源码解析SpaceX API Starlink 卫星查询接口实战v4/starlink/query 请求构建、分页机制与源码解析 本篇指南围绕 SpaceX API后端API设计Wagtail 信号Signals完全指南从 published、page_move 到工作流事件的内容系统解耦机制Wagtail 信号Signals完全指南从 published、page_move 到工作流事件的内容系统解耦机制 本文基于 Wagtail 官方文档后端API设计SpaceX-API v4 单条 Ship 数据查询指南GET /v4/ships/:id 接口详解与源码解析SpaceX API v4 单条 Ship 数据查询指南GET /v4/ships/:id 接口详解与源码解析 本文以 SpaceX API 开源仓库的官方文后端API设计上一篇OpenEuler CinderX社区贡献指南如何参与这个高性能Python项目下一篇libcdma架构揭秘UB协议栈下的实体驱动设计与高效数据传输原理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表