API 概述
逍遥图库提供 RESTful API 接口,支持前后端分离开发。
基本信息
基础URL
开发环境: http://localhost:8080/api
生产环境: https://your-domain.com/api
请求格式
- Content-Type:
application/json - 字符编码:
UTF-8
响应格式
所有接口返回 JSON 格式:
{
"code": 0,
"message": "success",
"data": {
// 返回数据
}
}
状态码说明
| code | 说明 |
|---|---|
| 0 | 成功 |
| 400 | 参数错误 |
| 401 | 未认证 |
| 403 | 无权限 |
| 404 | 资源不存在 |
| 500 | 服务器错误 |
认证方式
Token 认证
登录后获取 Token,在请求头中携带:
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
获取 Token
POST /api/auth/login
Content-Type: application/json
{
"username": "user123",
"password": "password123"
}
响应:
{
"code": 0,
"message": "success",
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"expires_in": 604800
}
}
Token 有效期
- 默认有效期:7 天
- 可在配置中修改
分页参数
支持分页的接口使用以下参数:
| 参数 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| page | int | 页码 | 1 |
| limit | int | 每页数量 | 20 |
响应包含分页信息:
{
"code": 0,
"data": {
"list": [...],
"pagination": {
"page": 1,
"limit": 20,
"total": 100,
"pages": 5
}
}
}
排序参数
| 参数 | 类型 | 说明 | 示例 |
|---|---|---|---|
| sort | string | 排序字段 | create_time |
| order | string | 排序方向 | desc |
错误处理
错误响应格式
{
"code": 400,
"message": "参数错误",
"errors": {
"email": ["邮箱格式不正确"],
"password": ["密码不能少于6位"]
}
}
常见错误
| HTTP 状态码 | 说明 |
|---|---|
| 400 | 请求参数错误 |
| 401 | 未登录或 Token 过期 |
| 403 | 没有操作权限 |
| 404 | 资源不存在 |
| 429 | 请求过于频繁 |
| 500 | 服务器内部错误 |
频率限制
为保护系统,API 有请求频率限制:
- 每分钟 60 次请求
- 超出限制返回 429 错误
响应头包含限制信息:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1623456789
API 模块
| 模块 | 说明 | 文档 |
|---|---|---|
| 认证 | 注册、登录、用户信息 | auth |
| 图片 | 图片CRUD、上传、编辑 | photo |
| 相册 | 相册管理 | album |
| 用户 | 用户主页、关注 | user |
| 评论 | 评论管理 | comment |
| 管理 | 后台管理接口 | admin |
示例代码
JavaScript (Fetch)
// 登录获取 Token
async function login(username, password) {
const response = await fetch('/api/auth/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ username, password })
});
const data = await response.json();
return data.data.token;
}
// 获取图片列表
async function getPhotos(token) {
const response = await fetch('/api/photos?page=1&limit=20', {
headers: {
'Authorization': `Bearer ${token}`
}
});
return response.json();
}
PHP (cURL)
// 登录
function login($username, $password) {
$ch = curl_init('http://localhost:8080/api/auth/login');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'username' => $username,
'password' => $password
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
return $data['data']['token'];
}
Python (requests)
import requests
# 登录
def login(username, password):
response = requests.post(
'http://localhost:8080/api/auth/login',
json={'username': username, 'password': password}
)
data = response.json()
return data['data']['token']
# 获取图片列表
def get_photos(token):
response = requests.get(
'http://localhost:8080/api/photos',
headers={'Authorization': f'Bearer {token}'},
params={'page': 1, 'limit': 20}
)
return response.json()
CORS 跨域
开发环境允许所有来源的跨域请求。
生产环境需要配置允许的域名:
// config/cors.php
return [
'allow_origin' => ['https://your-frontend.com'],
'allow_methods' => ['GET', 'POST', 'PUT', 'DELETE'],
'allow_headers' => ['Content-Type', 'Authorization'],
];
