🚀 你的第一次 Packagist 查询
5 分钟,用纯 Go 完成"搜索包 → 看详情 → 看公告 → 看统计"四个动作。不需要本机安装 PHP 或 Composer,全程走 Packagist REST API。
为什么从这里开始
Packagist API SDK 是个纯 Go 客户端,没有任何外部运行时依赖。它是感受 Composer Skills "类型化返回值"理念最轻量的入口——你不用配置环境,跑起来就能看到结构化结果。
第 1 步:创建客户端
pkg/client.NewComposerClient 接收一个 HTTP 超时时间,返回一个开箱即用的客户端。
c := client.NewComposerClient(30 * time.Second)第 2 步:搜索包
SearchPackages(query, perPage, page) 返回 *domain.SearchResponse,里面有 Results 切片和 Total 总数。
第 3 步:获取包详情
GetPackage(name) 返回 *domain.ComposerPackageInfo,包含描述、版本、维护者等。
第 4 步:安全公告与统计
GetSecurityAdvisories() 拉取全站公告;GetStatistics() 返回总包数、总下载数。
完整可运行示例
把下面代码存为 main.go,go run main.go 即可。
package main
import (
"fmt"
"time"
"github.com/scagogogo/composer-skills/pkg/client"
)
func main() {
c := client.NewComposerClient(30 * time.Second)
// 1️⃣ 搜索包
results, err := c.SearchPackages("logging", 5, 1)
if err != nil {
panic(err)
}
fmt.Printf("🔍 搜索 logging,共 %d 个包,前 %d 个:\n", results.Total, len(results.Results))
for _, r := range results.Results {
fmt.Printf(" - %s: %s\n", r.Name, r.Description)
}
// 2️⃣ 获取包详情
pkg, err := c.GetPackage("monolog/monolog")
if err != nil {
panic(err)
}
fmt.Printf("\n📦 %s\n %s\n", pkg.Package.Name, pkg.Package.Description)
// 3️⃣ 安全公告
advisories, err := c.GetSecurityAdvisories()
if err != nil {
panic(err)
}
fmt.Printf("\n🔒 Packagist 共 %d 个包有安全公告\n", len(advisories.Advisories))
// 4️⃣ 统计信息
stats, err := c.GetStatistics()
if err != nil {
panic(err)
}
fmt.Printf("\n📊 总包数: %d | 总版本数: %d | 总下载: %d\n",
stats.Totals.Packages, stats.Totals.Versions, stats.Totals.Downloads)
}预期输出
🔍 搜索 logging,共 1234 个包,前 5 个:
- monolog/monolog: Sends your logs to files, sockets...
- ...
📦 monolog/monolog
Sends your logs to files, sockets, inboxes, databases and various web services
🔒 Packagist 共 87 个包有安全公告
📊 总包数: 390000 | 总版本数: 3200000 | 总下载: 9876543210进阶:分页与按标签搜索
SearchPackages 的 page 参数可翻页;想按标签过滤用 SearchPackagesByTags(tags, perPage, page),按类型过滤用 SearchPackagesByType(query, packageType, perPage, page)。
只关心某个包?
直接用 c.GetPackage("vendor/name") 一步到位,不必先搜索。还可用 GetPackageStats 拉该包的逐版本下载量。
网络与限流
Packagist 是公共 API,请合理设置 perPage(建议 ≤ 100)并复用同一个 client 实例,避免短时间内大量请求。
下一步
- 想批量拉包索引做镜像?继续 🪞 包镜像。
- 想真正操作依赖(安装/更新)?跳到 📦 从 Go 管理 PHP 依赖。