
Packagist API 是只读的,不支持认证或写操作
Packagist 官方提供的 API 本质上是公开、无认证、只读的 HTTP 接口,所有数据均来自其索引的公开 Composer 包。你无法用它发布包、更新元数据或触发构建——这些必须通过 composer publish(已弃用)或直接向 Packagist 提交 GitHub/GitLab 仓库绑定来完成。
实际能做的只有查询:包存在性、版本列表、某版本的 composer.json 内容、下载统计(需额外配置)、维护者信息等。API 响应为标准 JSON,无 CORS 限制,可直接在浏览器、curl 或任意后端语言中调用。
获取某个包的完整元数据:用 /p/{vendor}/{package}.json
这是最常用、最稳定的接口。例如想查 monolog/monolog 的全部版本和元信息,请求:
https://packagist.org/p/monolog/monolog.json
注意:{vendor} 和 {package} 必须小写、不含空格、符合 Composer 包命名规范(仅字母、数字、下划线、短横线)。常见错误包括:
- 误传大写(如
Monolog/Monolog→ 404) - 漏掉 vendor(如只传
monolog→ 404) - 带
v前缀(如v1.0.0)或分支名(如dev-main)——这些不是该接口的路径参数,而是响应体里的字段
响应中关键字段有:packages(含所有版本的 composer.json 快照)、providers(用于查找提供某 virtual package 的真实包)、notify(Webhook 地址,只读不可改)。
按关键词搜索包:用 /search.json?q=xxx
https://packagist.org/search.json?q=logging
返回最多 20 条结果,按流行度排序。重要限制:
- 不支持分页(无
page参数),想拿更多结果只能换关键词或用type:过滤 - 搜索字段仅限
name、description、keywords,不索引readme或源码 -
q=monolog和q=monolog/monolog结果不同:后者更精确,前者可能命中symfony/monolog-bridge - 若需限定类型(如只找
library),加&type=library;支持的值见 Packagist 文档,常见有library、project、metapackage
获取某版本的原始 composer.json:解析 /p/{vendor}/{package}.json 中的 dist 或 source URL
Packagist API 不直接返回某个具体版本的 composer.json 文件内容,而是返回一个“元描述”,其中每个版本对象里包含 dist(压缩包)或 source(Git 仓库)的 URL。要拿到真实 composer.json,得再发一次 GET 请求到那个 URL。
例如从 /p/monolog/monolog.json 响应中找到:
"2.10.0": {
"name": "monolog/monolog",
"version": "2.10.0",
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/5b8f9768e3a9b980c4490d442763e44038222875"
}
}
这个 url 指向 GitHub 的 zipball,解压后才有 composer.json。但更简单的方式是直接构造 GitHub raw URL:
https://raw.githubusercontent.com/Seldaek/monolog/2.10.0/composer.json
不过这依赖包托管在 GitHub 且公开,不通用。真正可靠的做法仍是走 dist.url 下载 zip 后提取——这也是 Composer 自身的逻辑。
容易忽略的一点:Packagist 返回的 dist.url 可能是临时签名链接(尤其对私有包镜像),有效期短,不能长期缓存。










