261 lines
6.2 KiB
Markdown
261 lines
6.2 KiB
Markdown
# Gitea API 使用文档
|
||
|
||
## 概述
|
||
|
||
本文档总结了在本次项目中成功使用的 Gitea API。
|
||
|
||
**Gitea 地址:** http://gitea.xieyao.vip/
|
||
**用户名:** xieyao
|
||
**Token:** 1ce08e3ca5d94641e0a243f374bba450f7639147
|
||
**API 版本:** v1
|
||
|
||
---
|
||
|
||
## 1. 获取用户仓库列表
|
||
|
||
### 接口信息
|
||
|
||
- **URL:** `/api/v1/user/repos`
|
||
- **方法:** `GET`
|
||
- **认证:** `Authorization: token <token>`
|
||
|
||
### 请求示例
|
||
|
||
```bash
|
||
curl -s -H "Authorization: token 1ce08e3ca5d94641e0a243f374bba450f7639147" \
|
||
http://gitea.xieyao.vip/api/v1/user/repos
|
||
```
|
||
|
||
### 响应数据结构
|
||
|
||
```json
|
||
{
|
||
"id": 6,
|
||
"name": "control",
|
||
"full_name": "xieyao/control",
|
||
"description": "",
|
||
"private": true,
|
||
"language": "Dart",
|
||
"size": 651,
|
||
"html_url": "http://192.168.1.6:3000/xieyao/control",
|
||
"clone_url": "http://192.168.1.6:3000/xieyao/control.git",
|
||
"ssh_url": "git@192.168.1.6:xieyao/control.git",
|
||
"default_branch": "main",
|
||
"created_at": "2026-02-16T15:16:10Z",
|
||
"updated_at": "2026-02-16T15:18:07Z"
|
||
}
|
||
```
|
||
|
||
### 关键字段说明
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `id` | number | 仓库 ID |
|
||
| `name` | string | 仓库名称 |
|
||
| `full_name` | string | 完整名称 (owner/name) |
|
||
| `description` | string | 仓库描述 |
|
||
| `private` | boolean | 是否私有 |
|
||
| `language` | string | 主要编程语言 |
|
||
| `size` | number | 仓库大小(字节) |
|
||
| `html_url` | string | 仓库访问地址 |
|
||
| `clone_url` | string | HTTP 克隆地址 |
|
||
| `ssh_url` | string | SSH 克隆地址 |
|
||
| `default_branch` | string | 默认分支 |
|
||
| `created_at` | string | 创建时间 (ISO 8601) |
|
||
| `updated_at` | string | 更新时间 (ISO 8601) |
|
||
|
||
---
|
||
|
||
## 2. 创建新仓库
|
||
|
||
### 接口信息
|
||
|
||
- **URL:** `/api/v1/user/repos`
|
||
- **方法:** `POST`
|
||
- **认证:** `Authorization: token <token>`
|
||
- **Header:** `Content-Type: application/json`
|
||
|
||
### 请求示例
|
||
|
||
```bash
|
||
curl -s -X POST -H "Authorization: token 1ce08e3ca5d94641e0a243f374bba450f7639147" \
|
||
-H "Content-Type: application/json" \
|
||
http://gitea.xieyao.vip/api/v1/user/repos \
|
||
-d '{
|
||
"name": "message",
|
||
"description": "汪汪的message仓库",
|
||
"auto_init": true,
|
||
"private": false
|
||
}'
|
||
```
|
||
|
||
### 请求参数
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| `name` | string | 是 | 仓库名称 |
|
||
| `description` | string | 否 | 仓库描述 |
|
||
| `auto_init` | boolean | 否 | 是否自动初始化(创建 README) |
|
||
| `private` | boolean | 否 | 是否私有 |
|
||
|
||
### 响应示例
|
||
|
||
```json
|
||
{
|
||
"id": 9,
|
||
"name": "message",
|
||
"full_name": "xieyao/message",
|
||
"description": "汪汪的message仓库",
|
||
"private": false,
|
||
"language": "",
|
||
"size": 23,
|
||
"html_url": "http://192.168.1.6:3000/xieyao/message",
|
||
"clone_url": "http://192.168.1.6:3000/xieyao/message.git",
|
||
"ssh_url": "git@192.168.1.6:xieyao/message.git",
|
||
"default_branch": "main",
|
||
"created_at": "2026-02-17T16:37:59Z",
|
||
"updated_at": "2026-02-17T16:38:00Z"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 上传通用包(Generic Package Registry)
|
||
|
||
### 接口信息
|
||
|
||
- **URL:** `/api/packages/{owner}/generic/{package_name}/{package_version}/{file_name}`
|
||
- **方法:** `PUT`
|
||
- **认证:** `Basic Auth` 或 `token`
|
||
- **Content-Type:** `application/octet-stream`
|
||
|
||
### 请求示例
|
||
|
||
```bash
|
||
curl -s -X PUT -u "xieyao:1ce08e3ca5d94641e0a243f374bba450f7639147" \
|
||
--upload-file devspec \
|
||
http://gitea.xieyao.vip/api/packages/xieyao/generic/devspec/1.0.0/devspec \
|
||
-w "\nHTTP Status: %{http_code}\n"
|
||
```
|
||
|
||
### 参数说明
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `owner` | string | 用户名或组织名 |
|
||
| `package_name` | string | 包名称(只能包含小写字母、数字、点、减号、加号、下划线) |
|
||
| `package_version` | string | 版本号(不能为空,前后不能有空格) |
|
||
| `file_name` | string | 文件名(只能包含小写字母、数字、点、减号、加号、下划线) |
|
||
|
||
### 响应
|
||
|
||
**成功:**
|
||
```
|
||
HTTP/2 201
|
||
```
|
||
|
||
**失败:**
|
||
- `400 Bad Request`:参数无效
|
||
- `409 Conflict`:文件名已存在
|
||
- `401 Unauthorized`:认证失败
|
||
|
||
### 验证包是否成功上传
|
||
|
||
```bash
|
||
curl -s -k -u "xieyao:1ce08e3ca5d94641e0a243f374bba450f7639147" \
|
||
"http://gitea.xieyao.vip/api/packages/xieyao/generic/devspec/1.0.0/devspec" \
|
||
-o downloaded_file \
|
||
-w "\nHTTP Status: %{http_code}\n"
|
||
```
|
||
|
||
---
|
||
|
||
## 常用工具函数(bash)
|
||
|
||
### 获取仓库列表
|
||
|
||
```bash
|
||
get_repos() {
|
||
curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||
$GITEA_API_URL/api/v1/user/repos
|
||
}
|
||
```
|
||
|
||
### 创建仓库
|
||
|
||
```bash
|
||
create_repo() {
|
||
local name="$1"
|
||
local description="${2:-}"
|
||
local auto_init="${3:-true}"
|
||
local private="${4:-false}"
|
||
|
||
curl -s -X POST -H "Authorization: token $GITEA_TOKEN" \
|
||
-H "Content-Type: application/json" \
|
||
$GITEA_API_URL/api/v1/user/repos \
|
||
-d "{
|
||
\"name\": \"$name\",
|
||
\"description\": \"$description\",
|
||
\"auto_init\": $auto_init,
|
||
\"private\": $private
|
||
}"
|
||
}
|
||
```
|
||
|
||
### 上传通用包
|
||
|
||
```bash
|
||
upload_generic_package() {
|
||
local owner="$1"
|
||
local package_name="$2"
|
||
local package_version="$3"
|
||
local file_path="$4"
|
||
|
||
curl -s -k -X PUT -u "$GITEA_USERNAME:$GITEA_TOKEN" \
|
||
--upload-file "$file_path" \
|
||
"$GITEA_API_URL/api/packages/$owner/generic/$package_name/$package_version/$(basename $file_path)" \
|
||
-w "\nHTTP Status: %{http_code}\n"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 注意事项
|
||
|
||
1. **认证方式**
|
||
- 使用 Token 认证:`Authorization: token <token>`
|
||
- 使用 Basic Auth:`-u username:token`
|
||
|
||
2. **HTTPS 证书**
|
||
- 如果 Gitea 使用自签名证书,需要添加 `-k` 参数跳过验证
|
||
|
||
3. **包命名规则**
|
||
- 包名和文件名只能包含小写字母、数字、点、减号、加号、下划线
|
||
- 版本号不能为空,前后不能有空格
|
||
|
||
4. **包关联**
|
||
- 上传包后,需要在 Web UI 中手动关联到仓库
|
||
- 访问:http://gitea.xieyao.vip/xieyao/packages
|
||
- 选择仓库进行关联
|
||
|
||
5. **代理设置**
|
||
- 如果使用了代理,需要取消代理后再访问 Gitea
|
||
```bash
|
||
unset https_proxy all_proxy
|
||
```
|
||
|
||
---
|
||
|
||
## 测试环境
|
||
|
||
- **Gitea 服务器:** http://gitea.xieyao.vip/
|
||
- **API 版本:** v1
|
||
- **测试时间:** 2026-02-18
|
||
- **操作人:** Geliebte
|
||
|
||
---
|
||
|
||
## 更新日志
|
||
|
||
- **2026-02-18** - 初始版本,记录了三个核心 API 的使用方法
|