Hasty Briefsbeta

双语

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格式的情况,这增加了其系统的复杂性。