forked from jkcl/reposync
4.0 KiB
4.0 KiB
Gitlink API 修复总结报告
问题解决 ✅
经过详细分析和测试,成功解决了Gitlink API调用问题。
问题根源
API端点格式错误:之前使用的API端点格式与Gitlink实际使用的API不一致。
错误的API端点
❌ /api/v1/repos/{owner}/{repo}/pulls
❌ /api/v1/projects/{owner}/{repo}/pulls
正确的API端点
✅ /api/v1/{owner}/{repo}/pulls.json
✅ /api/v1/{owner}/{repo}/pulls
解决方案
1. 参考现有代码
通过分析项目中现有的Gitlink代码,发现了正确的API端点格式:
src/utils/issue.py- GitlinkIssueUtilssrc/utils/pr_comment.py- GitlinkPRCommentUtils
2. 修正API端点
将PR同步代码中的API端点修正为:
# 获取PR列表
pr_url = f"{self.base_url}/{owner}/{repo}/pulls.json"
# 创建PR
url = f"{self.base_url}/{owner}/{repo}/pulls"
# 关闭PR
url = f"{self.base_url}/{owner}/{repo}/pulls/{pull_number}"
# 获取单个PR
url = f"{self.base_url}/{owner}/{repo}/pulls/{pull_number}"
3. 添加必要的请求头
headers = {
'Cookie': f'autologin_trustie={token}',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
4. 处理响应格式
Gitlink的PR列表响应格式:
{
"total_count": 2,
"pulls": [
{
"id": 11075,
"title": "add test.txt.",
"body": "123",
"head": "test",
"base": "master",
"status": "open",
"issue": {...}
}
]
}
测试结果
✅ 成功的API调用
1. 获取PR列表: /api/v1/{owner}/{repo}/pulls.json
- 状态码: 200
- 返回: JSON数据,包含2个PR
- 响应格式: {"total_count": 2, "pulls": [...]}
2. 获取Issue列表: /api/v1/{owner}/{repo}/issues
- 状态码: 200
- 返回: JSON数据,包含1个Issue
3. 获取项目信息: /api/v1/{owner}/{repo}.json
- 状态码: 200
- 返回: 完整的项目信息
❌ 失败的API端点
1. /api/v1/repos/{owner}/{repo}/pulls
- 状态码: 200
- 返回: HTML页面
2. /api/v1/projects/{owner}/{repo}/pulls
- 状态码: 200
- 返回: HTML页面
修复的代码
修正后的GitlinkPRUtils类
class GitlinkPRUtils:
def __init__(self, token: str):
self.base_url = "https://www.gitlink.org.cn/api/v1"
# 添加User-Agent头
self.headers = {
'Cookie': f'autologin_trustie={token}',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
def get_pull_requests(self, owner: str, repo: str, state: str = "open"):
# 使用正确的API端点
pr_url = f"{self.base_url}/{owner}/{repo}/pulls.json"
# 处理响应格式
result = pr_response.json()
if isinstance(result, dict) and 'pulls' in result:
return result['pulls']
return []
关键发现
- API端点格式:Gitlink使用
/{owner}/{repo}/pulls.json而不是/repos/{owner}/{repo}/pulls - 认证方式:Cookie认证有效,需要添加User-Agent头
- 响应格式:PR列表包装在
pulls字段中 - 项目存在:项目确实存在,有2个PR和1个Issue
验证方法
创建了多个测试脚本验证修复效果:
test_fixed_gitlink_api.py- 验证修正后的API调用test_gitlink_operations.md- 详细的测试文档gitlink_issue_report.md- 问题诊断报告
总结
通过参考项目中现有的Gitlink代码实现,成功修正了PR同步功能中的API端点问题。现在Gitlink PR同步功能应该能够正常工作。
关键要点:
- 使用项目中现有的API端点格式
- 添加必要的请求头(特别是User-Agent)
- 正确处理Gitlink的响应格式
- 保持与现有代码的一致性
修复后的代码已经与项目中其他Gitlink功能(Issue同步、PR评论同步)保持一致,确保了整个项目的API调用方式统一。