> 技术文档 > 程序员的“百宝箱”: GitHub 上最全的免费 API 集合 - public-apis 深度解读

程序员的“百宝箱”: GitHub 上最全的免费 API 集合 - public-apis 深度解读

还在为寻找合适的 API 苦恼吗?还在为项目快速原型开发抓耳挠腮吗? 别担心,GitHub 上的 public-apis/public-apis 项目,犹如一个程序员的“百宝箱”,汇集了海量的免费公共 API,涵盖了各种各样的功能,从天气预报到游戏数据,从图像处理到社交媒体,应有尽有。

本文将带你深入了解这个项目,解锁它的强大功能,让你在项目开发中如虎添翼,极大地提高效率。 准备好迎接你的 API 盛宴吧!

一、 什么是 public-apis? 它的价值何在?

public-apis/public-apis 是一个由 derekeder 维护的 GitHub 仓库,其主要目标是: 收集、整理和展示互联网上各种免费、公开可用的 API (应用程序编程接口),方便开发者进行项目开发、学习和测试。 可以理解为,它是一个 API 的“搜索引擎”,但更强大,因为它不仅仅提供 API 的列表,还提供 API 的详细信息、示例代码、认证方式等。

它的价值在于:

  • 资源丰富: 汇集了数千个 API,涵盖了各种各样的功能,满足了几乎所有开发需求。
  • 免费且公开: 所有 API 都是免费且公开的,你可以随意使用,无需支付任何费用。
  • 持续更新: 社区贡献者会不断更新和维护这个仓库,确保 API 的可用性和时效性。
  • 组织清晰: API 按照类别和功能进行分类,方便查找。你可以轻松找到自己感兴趣的 API。
  • 详细信息: 每个 API 通常都会提供详细的文档、示例代码和认证方式,帮助你快速上手。
  • 社区驱动: 这是一个由社区驱动的项目,每个人都可以贡献自己的力量。 你可以提交新的 API,改进现有的信息,为社区做出贡献。
  • 快速原型开发: 利用这些免费 API,你可以快速构建项目的原型,验证你的想法,节省时间和成本。
  • 学习 API 的绝佳资源: 通过使用这些 API,你可以学习如何与 API 交互,了解 API 设计模式,提高你的 API 开发能力。

二、 如何高效利用 public-apis?

public-apis 的资源浩如烟海,为了充分利用它,你需要掌握一些技巧:

  1. 访问 GitHub 仓库:

    首先,你需要访问 public-apis 的 GitHub 仓库:https://github.com/public-apis/public-apis

  2. 熟悉目录结构:

    public-apis 的目录结构经过精心设计,这有助于你快速找到所需 API。 主要目录结构如下:

    • README.md:项目的说明文档,包含了项目介绍、贡献指南、 API 状态说明等。
    • README.md 内部包含了 API 列表,API 按照类别分组,例如:
      • Animals (动物)
      • Anime (动漫)
      • Art & Design (艺术与设计)
      • Books (书籍)
      • Business (商业)
      • Calendar (日历)
      • Cloud (云服务)
      • Commerce (电商)
      • Currency Exchange (货币兑换)
      • Data Science (数据科学)
      • Development (开发)
      • Entertainment (娱乐)
      • Environment (环境)
      • Events (活动)
      • Finance (金融)
      • Food & Drink (食品和饮料)
      • Games & Comics (游戏和漫画)
      • Geocoding (地理编码)
      • Government (政府)
      • Health (健康)
      • Jobs (工作)
      • Machine Learning (机器学习)
      • Music (音乐)
      • News (新闻)
      • Open Source (开源)
      • Photography (摄影)
      • Programming (编程)
      • Science & Math (科学与数学)
      • Security (安全)
      • Social (社交)
      • Sports & Fitness (体育与健身)
      • Test Data (测试数据)
      • Text Analysis (文本分析)
      • Tracking (追踪)
      • Transportation (交通)
      • URL Shorteners (网址缩短)
      • Vehicle (车辆)
      • Video (视频)
      • Weather (天气)

    每个类别下面列出了该类别下的 API,通常包括:

    • API 名称
    • API 描述
    • API 链接 (指向 API 的文档)
    • HTTPS 支持 (是否支持 HTTPS)
    • CORS 支持 (是否支持 CORS)
    • Auth 类型 (认证方式,例如 API Key, OAuth)
  3. 根据类别和功能筛选:

    • 浏览 API 列表: 打开 README.md 文件,浏览 API 列表,查看 API 描述,了解其功能。
    • 按类别搜索: 根据你的项目需求,选择相应的类别。 例如,如果你想开发一个天气应用,就选择 Weather 类别。
    • 使用关键词搜索: 在浏览器中使用页面内搜索功能 (通常是 Ctrl + FCmd + F),搜索关键词来快速找到目标 API。 例如,搜索 “currency” 可以找到货币相关的 API。
    • 关注 API 的认证方式: 根据 API 的认证方式,选择合适的 API。 有些 API 需要 API Key,有些 API 支持 OAuth 认证,有些 API 不需要认证。
    • 检查 HTTPS 和 CORS 支持: 如果你的项目需要 HTTPS 或 CORS 支持,请选择支持这些功能的 API。
  4. 利用 GitHub 的功能:

    • Star & Watch: 给项目点 Star 可以关注这个项目,方便你跟踪更新。 Watch 可以让你收到项目有任何变动时的通知。
    • Fork: Fork 这个项目,你可以将其复制到你的 GitHub 账号下,方便你个性化修改和整理 API 列表。
    • Issues: 如果你发现了 API 失效、内容错误或者有新的 API 推荐,可以通过 Issues 功能向项目维护者反馈。
  5. 阅读 API 文档:

    • 点击 API 链接: 进入 API 的官方文档,了解 API 的使用方法、参数、返回值、错误码等。
    • 阅读快速入门: 很多 API 都提供了快速入门教程或示例代码,可以帮助你快速上手。
    • 测试 API: 使用 API 提供的测试工具或 Postman 等工具,测试 API 的功能。
  6. 根据 API 的状态标签选择 API:

    在 README.md 中,API 通常会带有不同的状态标签,例如:

    • 🟢 (Operational) - API 运行正常,推荐使用
    • 🟡 (Degraded) - API 运行可能出现问题
    • 🔴 (Down) - API 无法使用
    • 🟠 (Limited) - API 存在限制,例如速率限制或免费使用配额有限
    • (Unknown) - API 状态未知,需要进一步验证

    根据状态标签,选择可用的 API。

  7. 考虑 API 的速率限制和使用限制:

    许多免费 API 都有速率限制,即在一定时间内允许的请求次数。 在使用 API 时,需要考虑速率限制,避免超限导致 API 无法使用。 一些 API 还有免费使用配额限制,超过配额需要付费。

三、 推荐几个值得尝试的 API

public-apis 提供了海量的 API,这里列出几个值得推荐的,并附带了简单的使用示例,帮你快速上手:

1. Weather API (天气 API):

  • API 名称: AccuWeather API (示例)
  • 描述: 提供全球天气数据,包括天气预报、实况天气等。
  • API 链接: https://developer.accuweather.com/ (需要注册获取 API Key)

示例 (Python):

import requests# 替换为你的 API Keyapi_key = \"YOUR_API_KEY\"location_key = \"34858\" # 纽约市的 Location Key,可以在 AccuWeather 网站上查找url = f\"http://dataservice.accuweather.com/forecasts/v1/daily/1day/{ location_key}?apikey={ api_key}&language=zh-cn&metric=true\"try: response = requests.get(url) response.raise_for_status() # 检查请求是否成功 data = response.json() # 提取天气信息 if \"Headline\" in data: headline = data[\"Headline\"][\"Text\"] print(f\"天气概况: { headline}\") if \"DailyForecasts\" in data: forecast