# API 限流
限制超过系统负载的流量进入后端服务,对后端服务起到保护作用。
# 默认工蜂 API 限流策略
| URL Pattern | 维度 | 度量 (TPS/QPS) | 说明 |
|---|---|---|---|
| /api/v3/** | 账号 | 50万/半小时(278QPS/TPS) | 工蜂系统每个账号每秒最高的访问量不超过 278。特殊账号限流 80 万/半小时 (444QPS/TPS) |
重要说明:原则上不同类型接口限流的总 qps 不超过其账号每秒最高访问 qps 的总限制
# GIT 仓库相关
| URL Pattern | 维度 | 度量 (TPS/QPS) | 说明 |
|---|---|---|---|
| /api/v3/projects/:id_or_path/repository/** | 项目 | 100 | 2022-09-26 |
| /api/v3/projects/:id_or_path/repository/compare/** | 项目 | 5 | 2022-09-26 |
| /api/v3/projects/:id_or_path/repository/files/**/blame | 账号 + 项目 | 2 | |
| /api/v3/projects/:id_or_path/repository/files/blames | 账号 + 项目 | 0.5 | |
| /api/v3/projects/:id_or_path/repository/archive | 账号 + 项目 | 0.5 | |
| /api/v3/projects/:id_or_path/repository/branches | 项目 | 10 | |
| /api/v3/projects/:id_or_path/repository/commits | 项目 | 10 | 2022-09-26 |
| /api/v3/projects/:id/repository/files | 帐号 + 项目 | 5 | 2024-08-15 生效,针对 POST 请求 |
| /api/v3/projects/:id/repository/files | 帐号 + 项目 | 5 | 2024-08-15 生效,针对 PUT 请求 |
| /api/v3/projects/:id/repository/files | 帐号 + 项目 | 5 | 2024-08-15 生效,针对 DELETE 请求 |
| /api/v3/projects/:id/repository/files/batch | 帐号 + 项目 | 1 | 2024-08-15 生效 |
重要说明:id_or_path 中的/转换为%2F
# SVN 仓库相关
| URL Pattern | 限流值(用户维度) |
|---|---|
| /api/v3/svn/projects/:id_or_path/* | 1000req/min |
| /api/v3/svn/projects/:id_or_path/locks | 120req/min |
| /api/v3/svn/projects/:id_or_path/commits/* | 120req/min |
| /api/v3/svn/projects/:id_or_path/tree | 120req/min |
| /api/v3/svn/projects/:id_or_path/authority_member | 120req/min |
| /api/v3/svn/projects/:id_or_path/branches | 30req/min |
| /api/v3/svn/projects/:id_or_path/locks/unlock | 30req/min |
| /api/v3/svn/projects/:id_or_path/locks/lock | 30req/min |
| /api/v3/svn/projects/:id_or_path/reviews | 60req/min |
| /api/v3/svn/projects/:id_or_path/authority | 60req/min |
| /api/v3/svn/projects/:id_or_path/reviews/*/patch_sets | 60req/min |
| /api/v3/svn/projects/:id_or_path/hooks | 60req/min |
| /api/v3/svn/projects/:id_or_path/commit_settings | 60req/min |
| /api/v3/svn/projects/:id_or_path/commit_settings/* | 60req/min |
重要说明:id_or_path 中的/转换为%2F
# 项目功能
| URL Pattern | 维度 | 度量 (TPS/QPS) | 说明 |
|---|---|---|---|
| /api/v3/projects | 账号 | 10 | |
| /api/v3/projects/accessable | 账号 | 10 | |
| /api/v3/projects/list_authorized_projects | 账号 | 10 | |
| /api/v3/projects/:id_or_path/events | 账号 + 项目 | 5 | |
| /api/v3/projects/public | 账号 | 5 | |
| /api/v3/projects/:id_or_path/notes | 账号 | 20 |
重要说明:id_or_path 中的/转换为%2F
# 用户事件
| URL Pattern | 维度 | 度量 (TPS/QPS) | 说明 |
|---|---|---|---|
| /api/v3/events | 账号 | 0.5 | |
| /api/v3/users/:id/events | 账号 | 0.5 |
# 代码评审
| URL Pattern | 维度 | 度量 (TPS/QPS) | 说明 |
|---|---|---|---|
| /api/v3/projects/:id_or_path/review/**/owner/submit | 账号 + 项目 | 2 |
重要说明:id_or_path 中的/转换为%2F
# 限流响应报文
{
"api_username":"git01",
"message":"Too Many Requests",
"project_id":"349009",
"status":429,
"strategy_id":"2333,2360",
"timestamp":"2022-08-12 06:52:31.993",
"x_tips":"Request Limited"
}
字段说明:
status 和 message 是标准 http 状态,429 Too Many Requests(RFC 6585),用户在给定的时间内发送了太多的请求,旨在用于网络限速。