800+免费API大全:public-api-lists 开源项目实战入门
【免费下载链接】public-api-listsA curated list of free public APIs — searchable, community-maintained, with a free JSON API.项目地址: https://gitcode.com/GitHub_Trending/pu/public-api-lists
开源项目 public-api-lists 是一个社区维护的免费API大全,也是名副其实的免费API合集:800+ 个可用接口被分成 48 个类别,认证方式、是否支持 HTTPS、是否开放 CORS 都用统一表格记录,帮你省去逐个官网翻找的功夫。
三分钟上手
从零到拿到第一个能跑的接口,只需要四步:
把仓库拉到本地:
git clone https://gitcode.com/GitHub_Trending/pu/public-api-lists打开 README.md,顶部有完整的分类目录,点进你需要的分类即可。
每个分类都是一张表格,逐列看清Auth(认证方式)、HTTPS、CORS,挑一个写着 "No"(无需认证)的接口最快。
直接发请求验证。以随机狗狗图片接口为例:
// 无需注册,浏览器控制台即可运行 fetch('https://dog.ceo/api/breeds/image/random') .then(res => res.json()) .then(data => console.log(data.message));跑通这一步,整个合集的使用方式你就都懂了。
认证方式怎么选
三种认证方式的分布和适用场景如下:
| 认证方式 | 数量 | 适合的场景 |
|---|---|---|
| 无需认证 | 416 个 | 前端直接调用、课堂演示、快速验证想法 |
| API密钥 | 305 个 | 需要更稳定限额的个人项目,或正式生产接口 |
| OAuth | 85 个 | 要读取用户本人账户数据(如自己的音乐库、仓库) |
🔑 简单记一个判断顺序:调用方在浏览器里就优先选无需认证的;需要更高限额走 API 密钥(注册服务商拿一把 key 放进请求即可);只有涉及"用户是谁、授权给谁"时才上 OAuth,流程要经过授权码换令牌,复杂度明显高一档。
上图的搜索数据服务 SerpApi 就属于典型的密钥型接口:注册领 key,按次调用,适合放在服务端使用。
高频分类速查
48 个分类不必全看,日常用得最多的这几类可以先收藏:
- Weather 天气:预报、空气质量、历史数据,代表接口 Open-Meteo(无需认证)
- Finance 金融:股票行情与财务报表,代表接口 Alpha Vantage
- Music 音乐:曲目、歌词、个性化推荐,代表接口 Spotify
- Games & Comics 游戏:角色资料、玩家数据,代表接口 Pokéapi
- Anime 动漫:番剧信息与角色检索,代表接口 Jikan(无需认证)
- Cryptocurrency 加密货币:币价、市值与链上数据,代表接口 CoinGecko
- Development 开发工具:代码托管、CI、状态监控,代表接口 GitHub
- Books 图书:书目与封面数据,代表接口 Open Library(无需认证)
避坑手册
- 坑:接口某天突然挂了。→原因:免费服务大多没有可用性承诺,随时可能下线或改规则。→对策:关键功能准备 2~3 个同类备用接口,定期探活,返回结果先做结构校验。
- 坑:API 密钥泄露。→原因:把 key 硬编码在前端代码里,谁打开源码谁都能拿走。→对策:密钥放环境变量,只让服务端持有并转发请求。
- 坑:调用量超限被限流。→原因:同页面反复请求相同数据,配额被空耗。→对策:加一层带过期时间的缓存,能合并的请求合并发。
- 坑:浏览器里调用直接报跨域错误。→原因:部分接口未开放 CORS,前端直连会被拦截。→对策:选型时先看表格里的 CORS 列,不确定的先在服务端代理一层。
- 坑:以为免认证结果 401。→原因:不同接口规则不一,凭印象猜认证方式。→对策:严格照 Auth 列执行,"No" 才是真免认证。
进阶技巧
写两个轻量习惯,能让接口调用稳不少。
一是缓存优先:数据变化不快的接口(币价分钟级、天气小时级)先查本地缓存再发请求:
const cache = new Map(); async function cachedFetch(url, ttl = 36e5) { const hit = cache.get(url); if (hit && Date.now() - hit.t < ttl) return hit.d; const d = await (await fetch(url)).json(); cache.set(url, { d, t: Date.now() }); return d; }二是容错兜底:请求失败按指数间隔重试两三次,仍失败就返回本地降级数据或明确提示,别让页面白屏等死。限流场景下,把"多次小请求"合并成"一次大请求"往往比换接口更有效。
写在最后
发现好用但列表里没有的接口?fork 仓库后,按统一格式把名称、描述和认证方式填进 README.md 对应分类的表格,再提一个 PR 即可,审核通过后大家都能用上。新的接口在持续并入这个开源API项目,偶尔回来刷一眼目录,也许就有正合你需求的新条目。
【免费下载链接】public-api-listsA curated list of free public APIs — searchable, community-maintained, with a free JSON API.项目地址: https://gitcode.com/GitHub_Trending/pu/public-api-lists
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考