[Git]Gerrit接口使用说明

[Git]Gerrit接口使用说明

💡 原文中文,约1800字,阅读约需5分钟。
📝

内容提要

使用Gerrit的REST API需要鉴权,可以通过获取Token和使用HTTP Basic鉴权的方式实现。也可以使用pygerrit2库来简化对Gerrit平台的API调用。

🔎

延伸解读

鉴权路径与匿名访问的区别

Gerrit REST API 默认以匿名用户权限运行,直接访问 /projects/ 等接口只能获取公开数据。若需鉴权,必须在接口路径前添加 /a/ 前缀,例如 /a/projects/。这一设计意味着同一接口在有无 /a/ 时行为不同,开发者需根据是否需要用户身份来调整 URL,避免因遗漏前缀而误判权限问题。

Token 的获取与使用方式

鉴权 Token 需在 Gerrit 用户设置界面的 HTTPCredentials 中生成,点击 GENERATE NEW PASSWORD 后弹窗中 New Password 后的字符串即为 Token。该 Token 配合 HTTP Basic 鉴权使用,命令行中可通过 curl --user admin:token 访问,Python 中则用 requests 的 auth 参数传入用户名和 Token。注意 Token 应替换为实际值,Gerrit 地址也需改为真实地址。

响应中的 XSSI 防护前缀

Gerrit 返回的 JSON 数据前会附带 )]}' 字符,这是为防止 XSSI 攻击而添加的防护措施。直接解析该响应会导致 JSON 解析失败,因此在使用 requests 或 urllib 获取数据后,必须手动删除该前缀再进行后续处理。若使用 pygerrit2 库,该库可能已内部处理此问题,但了解这一机制有助于排查解析异常。

pygerrit2 库的简化作用

虽然 requests 或 urllib 也能调用 Gerrit API,但需自行处理鉴权、前缀删除等细节。pygerrit2 库通过 HTTPBasicAuth 和 GerritRestAPI 封装了这些步骤,安装后只需传入 URL、用户名和密码即可调用 get 等方法获取数据,例如获取所有仓库列表。这减少了重复代码,但需注意密码应替换为实际 Gerrit 用户密码。

❓

Q&A

Gerrit REST API 默认权限是什么?如何启用鉴权访问?

默认是匿名用户权限。要启用鉴权,需要在接口路径前加上 /a/ 前缀,例如访问 /a/projects/。

如何获取 Gerrit 的 REST API 鉴权 Token?

在 Gerrit 用户设置界面的 HTTP Credentials 部分,点击 GENERATE NEW PASSWORD,弹窗中 New Password 后面的字符串就是 REST API 的鉴权 Token。

使用 HTTP Basic 鉴权调用 Gerrit API 时,命令行和 Python 分别怎么写?

命令行:curl --user admin:token https://gerrit.cn/a/projects/;Python:使用 requests.get(url, auth=('admin', token)),其中 url 需包含 /a/ 前缀。

Gerrit API 返回的 JSON 数据前面为什么有 )]}' 字符?如何处理?

这是为了防止 XSSI 攻击而添加的。在处理响应数据时,需要先删除这个前缀字符,再解析 JSON。

pygerrit2 库是什么?如何安装和使用它调用 Gerrit API?

pygerrit2 是一个简化 Gerrit API 调用的 Python 库。通过 pip install pygerrit2 安装。使用示例:导入 HTTPBasicAuth 和 GerritRestAPI,创建 GerritRestAPI 实例并传入认证信息,然后调用 get 方法获取数据。

使用 pygerrit2 库相比直接使用 requests 有什么好处?

pygerrit2 可以简化对 Gerrit 平台的 API 调用,减少手动处理鉴权、URL 拼接等操作,使代码更简洁。

🏷️

标签

➡️

继续阅读