news 2026/10/2 2:23:16

public-apis 贡献指南:向公共 API 清单提交高质量 API 条目的完整规范与实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
public-apis 贡献指南:向公共 API 清单提交高质量 API 条目的完整规范与实践
  • 知识库
  • 文档

【免费下载链接】public-apis

A collaborative list of public APIs for developers

项目地址:https://gitcode.com/GitHub_Trending/publ/public-apis
点击查看免费下载

这是一篇面向开发者的实操指南,围绕 public-apis 开源仓库的 CONTRIBUTING.md 展开:你将掌握本仓库对公共 API 条目的接受标准、表格格式规范、Auth与CORS字段的取值约束、Pull Request 提交流程,以及这些规范如何被仓库自动构建脚本(/db目录生成)程序化消费。读完本文,你能够独立完成一个格式合规、能够通过自动化审查并最终合入main分支的 API 条目提交。

public-apis 是一个"协作式公共 API 清单",它以 README.md 中的 52 个分类表格为唯一内容源,所有 API 条目都写在 Markdown 表格里。这意味着:对公共 API 的增删改,不是直接编辑数据文件,而是编辑 README 中的表格行,随后由仓库脚本自动同步生成结构化数据。理解这一"编辑 → 解析 → 生成"链路,是正确提交的前提。

核心原则:/db目录自动生成,勿手动修改

仓库目录结构中存在db/categories.json与db/resources.json两个数据文件,但贡献者必须明确一条铁律:

/db目录是自动生成的,请不要编辑它。任何与公共 API 相关的变更都应发生在README.md文件上。

这一点在 CONTRIBUTING.md 开头即被强调。从源码看,该流程由 scripts/db/update-db.js 实现:脚本读取README.md,使用remark-parse与unified将 Markdown 解析为 AST,再依次经过separateTables、groupRowContent、formatResources、formatCategories等工具函数,最终写入db/resources.json与db/categories.json。其中formatResources会把表格行中的Description | Auth | CORS拆分映射为API、Description、Auth、Cors、Link、Category六个字段——这意味着你在表格里怎么写,数据文件里就怎么长,格式不合规会直接污染下游数据。

配套的公开数据结构与读取示例见 API.md,它给出使用Octokit从仓库/db目录拉取categories.json(含count与entries)和resources.json(含API、Auth、Category、Cors、Description、Link)的完整代码。换句话说,README 表格是"人读"的界面,/dbJSON 是"机器读"的产物,二者必须保持一一对应。

接受标准:什么样的 API 才有资格进入清单

提交之前,请先对照以下 8 条硬性标准自查,缺一不可:

  • 任何用例均可(Any use case):产品可以服务任意受众与主题,关键不在于领域,而在于它确实对外暴露了可连接的 API。
  • 免费或付费均可(Free or paid):这里的 "public" 指"任何人都能注册并调用",不等于免费。付费(paid)与 freemium 模式的 API 同样欢迎。
  • 自助服务(Self-serve):不允许候补名单(waitlists)、封闭注册的 beta、"即将上线"(coming soon)产品、合作伙伴审批流程或"联系销售"(contact sales)门槛。一个陌生人必须能仅凭文档就独立完成从阅读到成功调用的全过程。
  • 可公开访问且有文档(Publicly reachable and documented):API 必须在当前时刻可公开访问,并具备完整文档;若无法从文档中确定其Auth与CORS行为,则不符合资格。
  • 仅限主产品(Main product only):提交对象必须是独立产品本身;大型产品的内部工具或子功能不被接受(API 本身不必是产品的主营业务)。
  • 必须使用自定义域名(Custom domain required):托管在共享子域名(如vercel.app、netlify.app、herokuapp.com、github.io、pages.dev等)上的 API 一律不接受。
  • 干净的 URL(Clean URLs):URL 不得包含查询参数(?之后的部分),应链接到普通页面。
  • 质量门槛(Quality bar):低质量、低投入的项目不被接受。

此外,仅提供应用(apps)、库(libraries)、CLI、SDK 或网站、但没有可连接 API 的工具不属于本清单。文档进一步说明:若你的产品是"开发者用来构建软件的工具",它更契合dev-resources类项目;若它同时暴露公共 API,则可以同时出现在两个清单中——两个目录有意存在重叠,一个出现在其中并不构成另一个的重复。

条目格式规范:四列表格与示例

标准表格结构

清单中每个分类是一个四列 Markdown 表格,列头依次为:

APIDescriptionAuthCORS
API 名称(链接到 API 主页)API 描述是否需要认证 *是否支持 CORS *

文档给出的最小示例条目为:

| [Cataas](https://cataas.com) | Cat as a service (cats pictures and gifs) | No | No |

URL 与链接规范

  • URL 必须以https://开头,纯http://的 URL 不被接受。
  • 链接应指向 API 的主页——即你会优先发给别人的那个页面。当产品有自己的主页时,避免深链到文档页、具体端点或子域名。
  • 链接页面的截屏会成为该条目在publicapis.dev网站上的展示卡片,访问者可以由此进入文档。

Auth 字段:只接受 5 种取值

当前Auth字段唯一接受的输入如下:

  • OAuth— API 支持 OAuth 认证;
  • apiKey— API 使用私有密钥字符串/令牌进行认证(尽量使用正确的参数名);
  • X-Mashape-Key— 可能需要发送的请求头名称(指旧 Mashape 市场遗留的认证头约定);
  • No— API 运行无需认证;
  • User-Agent— 随请求发送的请求头名称(即仅需在请求中携带合法的 User-Agent 即可调用)。

CORS 字段:只接受 3 种取值

  • Yes— API 支持 CORS;
  • No— API 不支持 CORS;
  • Unknown— 是否支持 CORS 未知。

需要特别理解的是 CORS 的判定含义:没有正确配置 CORS 的 API 将只能在服务端使用(浏览器端的跨域请求会被拦截)。因此,如果文档无法明确说明 CORS 行为,该条目就可能在审查中被退回。

从源码看表格如何被程序化消费

了解规范背后的解析逻辑,能帮助你写出真正合格的条目。在 scripts/db/update-db.js 中,README 被解析后依次经过如下工具链:

  1. separate-tables.js:跳过 Index 列表之后,每遇到一个三级标题(如### AI)就把紧随其后的表格识别为一个分类,得到{ name, rows };
  2. group-row-content.js:跳过表头行,把每行中的链接解析为{ link, name },并拼接同一行后续单元格文本作为description;
  3. format-resources.js:对每行的description按|再次切分并trim,得到description、auth、cors三个值,映射输出API / Description / Auth / Cors / Link / Category字段;
  4. format-categories.js:对分类名做 slug 化处理——小写化、&替换为and、非字母数字字符替换为-(例如Art & Design→art-and-design,这可以在 db/categories.json 中得到印证);
  5. format-json.js与write-to-file.js:组装出{ "count": n, "entries": [...] }结构的 JSON 并写入db/目录。

从format-resources.js的实现可以推断两个关键事实:一是Auth字段中No会被规范化处理为空字符串(auth?.toLowerCase() === 'no' ? '' : auth),即"无需认证"在数据结构中以空值表达;二是Cors字段会统一转为小写。因此,表格中拼写错误的Auth/CORS取值会原样进入数据文件,保持与文档允许值一致是唯一稳妥做法。

Pull Request 提交规范

完成条目修改并创建分支后,提交 PR 时须遵守以下硬性规则:

  • 不提交已列 API 的更新/新版本:已列出的 API 只保留当前版本,旧版本会随时间弃用。
  • 保持分类内字母序:继续遵循每个分类现有的字母排序。
  • 表格单元格两侧各留一个空格:保证 Markdown 表格对齐与解析稳定。
  • 分类归属以服务性质为准:若一个 API 可归入多个分类,放入与其服务最契合的一类(文档示例:Instagram API 归入Social而非Photography,因为其本质是社交网络)。
  • 一个 PR 只添加一个链接。
  • PR 标题格式:必须为Add Api-name API,例如Add Blockchain API。
  • 提交信息要简短且具描述性:例如 ✅Add Blockchain API to Cryptocurrency,而非 ❌Update Readme.md。
  • 提交前检索:先搜索既有 Pull Requests 与 Issues,避免重复提交。
  • 名称不要带顶级域名(TLD):❌Gmail.com,✅Gmail。
  • 名称不要以API结尾:❌Gmail API,✅Gmail。
  • 确保 API 有完整文档。
  • 链接主页而非深链(见上文 URL 规范)。
  • 描述控制在 160 字符以内,以保证适配条目卡片展示。
  • 合并所有提交(squash):提交 PR 前把所有 commit 压缩为一个;若审查后要求修改,补充的新提交也要一并 squash。
  • 目标分支:PR 必须指向public-apis仓库的main分支。

Pull Request 实用技巧(Pro Tips)

  • 先 Fork 仓库并本地 clone;将本地仓库与原始upstream仓库关联为 remote,经常从upstream拉取更新,这样提交 PR 时更不容易产生合并冲突。
  • 为你的改动创建独立分支。
  • 按照上文约定风格贡献,便于协作者合并与后续维护。

PR 提交后的审查流程

PR 打开后,围绕你的改动会展开讨论:

  • 先由自动化审查者审核:仓库可能通过 bot 账号对 PR 进行评论、批准或关闭;审查内容包括 URL 是否可访问。
  • 再由维护者做最终合并决策:讨论期间若被要求修改,只需在分支上追加提交并推送,它们会自动进入现有 PR(但别忘记 squash)。
  • 无 CI 构建需要等待:自动化审查在 PR 打开时检查条目(含 URL 可达性),已合入的每条 API 会被持续链接检查(link-checked)。请确保提交的 URL 是活的且正确——失效或跳转的链接是提交被退回的最常见原因。

一份可直接执行的提交检查清单

把以上规范压缩成提交前的最后检查步骤:

  1. 在 README.md 的对应分类表格中,以https://主页链接新增一行,四列均合规;
  2. Auth取值 ∈ {OAuth,apiKey,X-Mashape-Key,No,User-Agent},CORS取值 ∈ {Yes,No,Unknown};
  3. 描述 ≤ 160 字符,名称不含 TLD、不以API结尾;
  4. URL 不含查询参数、为自定义域名、非深链;
  5. 保持分类内字母序,表格单元格两侧留空格;
  6. 单条链接一个 PR,标题为Add Api-name API,目标分支为main;
  7. squash 所有 commit,提交前检查 URL 可访问且无重定向。

遵循以上规范,你的条目将顺利通过自动化审查与维护者评估,成为这份 52 个分类、覆盖 AI、区块链、金融、天气等领域的公共 API 清单的一员。

  • 知识库
  • 文档

【免费下载链接】public-apis

A collaborative list of public APIs for developers

项目地址:https://gitcode.com/GitHub_Trending/publ/public-apis
点击查看免费下载
上一篇:Ant Design Modal 组件 Token 定制指南:通过 ConfigProvider 精确控制对话框配色与排版
下一篇:深入 Roc 的 `?` 提前返回:局部类型注解不改变 Try 解包的类型检查目标(基于 roc 编译器快照测试剖析)

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 2:20:49

Python aggie-unterprise 包完全指南与常见错误

1. 引言aggie-unterprise 是一个面向 Python 开发者的实用工具包,专注于简化企业级应用开发中的常见任务。它提供了一系列封装良好的接口,帮助开发者快速完成数据聚合、配置管理、日志记录、任务调度等操作,从而减少重复代码,提升…

作者头像 李华
网站建设 2026/10/2 2:20:49

Python agg-abdurion 包完全指南与实战案例

1. 引言agg-abdurion 是一个面向 Python 数据处理场景的聚合分析工具包,专注于为开发者提供简洁、高效的数据聚合与分组计算能力。它建立在 Python 原生数据结构之上,通过统一的 API 设计,帮助开发者快速完成数据分组、聚合统计、窗口计算等常…

作者头像 李华