Every GitHub Object Has Two IDs
4 months ago
- #Software Development
- #Reverse Engineering
- #GitHub API
- GitHub的API采用两套独立的ID系统:节点ID(来自GraphQL)和数据库ID(用于URL)。
- 节点ID经过base64编码,可通过位掩码解码提取出数据库ID。
- 解码后的节点ID显示为96位整数,其中低32位嵌入了数据库ID。
- GitHub存在新旧两种ID格式,旧版仓库使用更简单的基于文本的格式。
- 新版ID采用MessagePack进行二进制序列化,将仓库和对象ID编码在数组中。
- 开发了一个函数,通过解码节点ID并提取数组末元素来实现节点ID到数据库ID的转换。
- 本次探索揭示了GitHub混合使用新旧ID格式的情况,这增加了其系统的复杂性。