菜单

系统架构

相关源文件

本文档描述了GitHub Readme Stats的整体架构,该服务生成动态SVG卡片,在README文件中显示各种GitHub统计信息。它全面概述了系统组件、它们之间的交互以及从请求到响应的数据流。

有关特定卡片类型及其生成的信息,请参阅卡片生成系统

概述

GitHub Readme Stats构建为一个无服务器应用程序,通过API端点按需生成SVG图像。该系统设计为无状态的,每个请求独立处理。其架构遵循模块化模式,并在数据获取、处理和渲染组件之间进行了清晰的分离。

此架构的主要目标是提供一个响应式、可定制的系统,该系统能够检索GitHub统计信息并将其渲染成视觉上吸引人的SVG卡片。

系统组件

来源

请求流程

系统通过以下流程处理请求

来源

API 层

API层是所有请求进入系统的入口点。它负责参数解析、验证,并协调数据获取和渲染过程。

端点

GitHub Readme Stats公开了多个API端点,每个端点负责生成特定类型的卡片

端点目的主要参数处理文件
/api统计卡片usernameapi/index.js
/api/pin仓库卡片username, repoapi/pin.js
/api/top-langs热门语言username未在文件中显示
/api/wakatimeWakaTime统计username未在文件中显示
/api/gistGist卡片id未在文件中显示

每个端点都遵循类似的请求处理模式

来源

参数处理

系统支持众多参数来定制卡片的显示效果。这些参数从请求查询字符串中提取,并在传递给渲染函数之前进行预处理。

常见参数包括

参数类别示例处理函数
布尔值标志hide_border, show_iconsparseBoolean()
列表hide, exclude_repoparseArray()
颜色title_color, text_colorfallbackColor()
主题themegetCardColors()
本地化localeisLocaleAvailable()

来源

数据获取层

数据获取层负责从GitHub和WakaTime等外部API检索数据。

GitHub API 集成

该系统使用GitHub的GraphQL API进行高效数据检索,并在需要时回退到REST API。

来源

身份验证和速率限制

系统使用GitHub个人访问令牌(PATs)进行身份验证,以避免速率限制问题。可以配置多个令牌以实现负载平衡。

渲染层

渲染层将获取的数据转换为SVG卡片。

卡片渲染过程

每种卡片类型都有其专用的渲染函数

来源

SVG生成

卡片生成为SVG字符串,这允许

  1. 基于用户数据的动态内容
  2. 基于参数的自定义样式
  3. 响应式布局适应内容长度

渲染过程广泛使用实用函数进行

  • 文本布局和换行
  • 颜色处理和主题化
  • 布局计算
  • 图标生成

来源

支持系统

排名计算

该系统根据各种指标计算用户的GitHub排名

排名计算使用加权指标,并结合指数和对数正态累积分布函数来确定用户的级别(S、A+、A、A-、B+、B、B-、C+、C)和百分位。

来源

主题系统

主题系统为所有卡片提供了一致的样式

来源

国际化

系统通过翻译系统支持多种语言

来源

实用函数

系统包含许多支持核心功能的实用函数

功能目的位置
kFormatter()格式化大数字(1.5k)src/common/utils.js118-122
encodeHTML()HTML编码字符串src/common/utils.js339-345
isValidHexColor()验证颜色字符串src/common/utils.js130-134
fallbackColor()应用颜色回退src/common/utils.js206-218
flexLayout()定位SVG元素src/common/utils.js53-65
wrapTextMultiline()以换行格式化文本src/common/utils.js411-436

来源

缓存策略

系统采用缓存策略,以减少 API 调用并提高性能

不同卡片类型的缓存时长不同,取决于其数据预期的更改频率

卡片类型默认缓存时长常量
统计卡片1天CARD_CACHE_SECONDS
热门语言6天TOP_LANGS_CACHE_SECONDS
置顶卡片10天PIN_CARD_CACHE_SECONDS
错误响应10分钟ERROR_CACHE_SECONDS

来源

错误处理

系统实施了全面的错误处理

错误卡片包括:

  1. 主要错误消息
  2. 次要消息,包含更多详细信息或故障排除说明
  3. 与主卡片风格一致

来源

测试基础设施

系统包含全面的测试,包括:

  1. 单元测试,用于测试单个函数
  2. 端到端测试,用于测试完整的请求流程

端到端测试可验证已部署的实例是否与本地渲染函数的预期输出相匹配。

来源

持续集成

系统使用 Husky hooks 和 GitHub Actions 进行 CI/CD

来源

结论

GitHub Readme Stats 架构展示了一个结构良好、模块化的系统,用于动态生成 SVG 卡片。API 处理、数据获取和渲染之间清晰的划分使得系统易于维护和扩展。

实用函数、主题和国际化功能的运用,在保持代码模式一致性的同时,为用户提供了灵活且可定制的体验。