reposync/gitlink_api_fix_summary.md

4.0 KiB
Raw Permalink Blame History

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 - GitlinkIssueUtils
  • src/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 []

关键发现

  1. API端点格式Gitlink使用 /{owner}/{repo}/pulls.json 而不是 /repos/{owner}/{repo}/pulls
  2. 认证方式Cookie认证有效需要添加User-Agent头
  3. 响应格式PR列表包装在 pulls 字段中
  4. 项目存在项目确实存在有2个PR和1个Issue

验证方法

创建了多个测试脚本验证修复效果:

  • test_fixed_gitlink_api.py - 验证修正后的API调用
  • test_gitlink_operations.md - 详细的测试文档
  • gitlink_issue_report.md - 问题诊断报告

总结

通过参考项目中现有的Gitlink代码实现成功修正了PR同步功能中的API端点问题。现在Gitlink PR同步功能应该能够正常工作。

关键要点

  1. 使用项目中现有的API端点格式
  2. 添加必要的请求头特别是User-Agent
  3. 正确处理Gitlink的响应格式
  4. 保持与现有代码的一致性

修复后的代码已经与项目中其他Gitlink功能Issue同步、PR评论同步保持一致确保了整个项目的API调用方式统一。