# GitHub API入门:自动化GitHub工作流
## 什么是GitHub API
GitHub API是GitHub提供的RESTful接口,允许你:
– 程序化地与GitHub交互
– 自动化GitHub相关的任务
– 构建自定义工具和集成
– 扩展GitHub的功能
## 为什么使用GitHub API
– **自动化工作流**:减少手动操作,提高效率
– **自定义工具**:根据特定需求构建工具
– **集成第三方服务**:与其他系统集成
– **数据获取**:获取和分析GitHub数据
## API版本和认证
### API版本
– 当前版本:v3
– 使用方式:在请求头中指定 `Accept: application/vnd.github.v3+json`
### 认证方式
1. **Personal Access Token (PAT)**
– 最常用的认证方式
– 可以设置权限范围
– 在GitHub设置中生成
2. **OAuth Apps**
– 适合第三方应用
– 提供用户授权流程
3. **GitHub Apps**
– 更安全的认证方式
– 基于安装的权限模型
## 基本API请求
### 使用curl发送请求
“`bash
# 获取用户信息
curl -H “Authorization: token YOUR_TOKEN” \
https://api.github.com/user
# 获取仓库信息
curl -H “Authorization: token YOUR_TOKEN” \
https://api.github.com/repos/username/repository
“`
### 使用Python请求
“`python
import requests
headers = {
‘Authorization’: ‘token YOUR_TOKEN’,
‘Accept’: ‘application/vnd.github.v3+json’
}
# 获取用户信息
response = requests.get(‘https://api.github.com/user’, headers=headers)
print(response.json())
# 获取仓库信息
response = requests.get(‘https://api.github.com/repos/username/repository’, headers=headers)
print(response.json())
“`
## 常见API端点
### 用户相关
– `GET /user`:获取当前用户信息
– `GET /users/{username}`:获取指定用户信息
– `GET /user/repos`:获取当前用户的仓库
### 仓库相关
– `GET /repos/{owner}/{repo}`:获取仓库信息
– `POST /repos/{owner}/{repo}`:创建仓库
– `GET /repos/{owner}/{repo}/issues`:获取仓库的Issue
– `GET /repos/{owner}/{repo}/pulls`:获取仓库的PR
### Issue和PR相关
– `POST /repos/{owner}/{repo}/issues`:创建Issue
– `POST /repos/{owner}/{repo}/pulls`:创建PR
– `PATCH /repos/{owner}/{repo}/issues/{issue_number}`:更新Issue
### 分支和提交相关
– `GET /repos/{owner}/{repo}/branches`:获取分支列表
– `GET /repos/{owner}/{repo}/commits`:获取提交历史
– `POST /repos/{owner}/{repo}/git/refs`:创建分支
## 实用示例
### 1. 自动创建Issue
“`python
import requests
headers = {
‘Authorization’: ‘token YOUR_TOKEN’,
‘Accept’: ‘application/vnd.github.v3+json’
}
# 创建Issue
issue_data = {
‘title’: ‘Bug: Login form not working’,
‘body’: ‘The login form is not submitting properly when using Chrome.’,
‘labels’: [‘bug’, ‘frontend’]
}
response = requests.post(
‘https://api.github.com/repos/username/repository/issues’,
headers=headers,
json=issue_data
)
print(f”Issue created: {response.json()[‘html_url’]}”)
“`
### 2. 自动创建PR
“`python
import requests
headers = {
‘Authorization’: ‘token YOUR_TOKEN’,
‘Accept’: ‘application/vnd.github.v3+json’
}
# 创建PR
pr_data = {
‘title’: ‘Add new feature’,
‘head’: ‘feature-branch’,
‘base’: ‘main’,
‘body’: ‘This PR adds a new feature to the application.’
}
response = requests.post(
‘https://api.github.com/repos/username/repository/pulls’,
headers=headers,
json=pr_data
)
print(f”PR created: {response.json()[‘html_url’]}”)
“`
### 3. 自动合并PR
“`python
import requests
headers = {
‘Authorization’: ‘token YOUR_TOKEN’,
‘Accept’: ‘application/vnd.github.v3+json’
}
# 合并PR
merge_data = {
‘commit_message’: ‘Merge pull request #123’,
‘merge_method’: ‘merge’ # 可选:merge, squash, rebase
}
response = requests.put(
‘https://api.github.com/repos/username/repository/pulls/123/merge’,
headers=headers,
json=merge_data
)
print(f”PR merged: {response.json()[‘merged’]}”)
“`
## 最佳实践
### 速率限制
– 未认证请求:每小时60次
– 认证请求:每小时5000次
– 使用 `X-RateLimit-Remaining` 头检查剩余请求数
### 分页
– API响应默认分页,每页30项
– 使用 `page` 和 `per_page` 参数控制分页
– 处理所有页面时使用循环
### 错误处理
– 检查HTTP状态码
– 处理404、403等错误
– 实现重试机制
### 安全
– 不要硬编码API令牌
– 使用环境变量存储敏感信息
– 为令牌设置适当的权限范围
## 高级用例
### 1. 自动化工作流
– 自动创建分支和PR
– 自动运行测试和部署
– 自动生成发布说明
### 2. 数据分析
– 分析仓库活跃度
– 统计贡献者数据
– 监控Issue和PR状态
### 3. 自定义集成
– 与CI/CD系统集成
– 与项目管理工具集成
– 与聊天工具集成
通过GitHub API,你可以构建强大的自动化工具和集成,显著提高开发效率和团队协作能力。