Files

542 lines
7.9 KiB
Markdown
Raw Permalink Normal View History

# 城市手册 - API 文档
## 1. API 概述
### 1.1 基础信息
- **Base URL:** `http://localhost:8000/api`
- **认证方式:** JWT Bearer Token
- **数据格式:** JSON
- **GraphQL 端点:** `http://localhost:8000/graphql/`
### 1.2 认证
所有需要认证的接口需要在 Header 中携带 JWT Token
```
Authorization: Bearer <access_token>
```
### 1.3 错误响应
```json
{
"error": {
"code": "ERROR_CODE",
"message": "错误描述",
"details": {}
}
}
```
## 2. 用户认证 API
### 2.1 用户注册
**POST** `/api/users/`
**请求:**
```json
{
"username": "string",
"email": "string",
"password": "string",
"phone": "string"
}
```
**响应:**
```json
{
"id": 1,
"username": "string",
"email": "string",
"phone": "string",
"role": "user",
"created_at": "2026-04-12T00:00:00Z"
}
```
### 2.2 用户登录
**POST** `/api/auth/token/`
**请求:**
```json
{
"username": "string",
"password": "string"
}
```
**响应:**
```json
{
"access": "eyJ0eXAiOiJKV1QiLCJhbGc...",
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGc..."
}
```
### 2.3 刷新令牌
**POST** `/api/auth/token/refresh/`
**请求:**
```json
{
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGc..."
}
```
**响应:**
```json
{
"access": "eyJ0eXAiOiJKV1QiLCJhbGc..."
}
```
### 2.4 获取当前用户信息
**GET** `/api/users/me/`
**Headers:**
```
Authorization: Bearer <access_token>
```
**响应:**
```json
{
"id": 1,
"username": "string",
"email": "string",
"phone": "string",
"role": "user",
"avatar": "url",
"created_at": "2026-04-12T00:00:00Z"
}
```
### 2.5 更新用户信息
**PUT** `/api/users/me/`
**请求:**
```json
{
"username": "string",
"email": "string",
"phone": "string",
"avatar": "url"
}
```
## 3. 版块管理 API
### 3.1 获取版块列表
**GET** `/api/regions/`
**查询参数:**
- `level` - 版块级别province/city/county/town/village
- `parent` - 上级版块 ID
- `search` - 搜索关键词
**响应:**
```json
{
"count": 100,
"next": "url",
"previous": "url",
"results": [
{
"id": 1,
"name": "广东省",
"level": "province",
"parent": null,
"children": [],
"moderator_count": 5,
"article_count": 100
}
]
}
```
### 3.2 获取版块详情
**GET** `/api/regions/{id}/`
**响应:**
```json
{
"id": 1,
"name": "深圳市",
"level": "city",
"parent": {
"id": 1,
"name": "广东省"
},
"children": [
{"id": 2, "name": "南山区"},
{"id": 3, "name": "福田区"}
],
"description": "description",
"moderator_count": 3,
"article_count": 50,
"service_count": 20,
"created_at": "2026-04-12T00:00:00Z"
}
```
### 3.3 创建版块
**POST** `/api/regions/`
**权限:** 管理员
**请求:**
```json
{
"name": "string",
"level": "city",
"parent": 1,
"description": "string"
}
```
## 4. 内容管理 API
### 4.1 获取文章列表
**GET** `/api/articles/`
**查询参数:**
- `region` - 版块 ID
- `category` - 分类history/culture/practical/life
- `status` - 状态draft/pending/published/rejected
- `search` - 搜索关键词
**响应:**
```json
{
"count": 100,
"results": [
{
"id": 1,
"title": "深圳历史",
"region": {"id": 1, "name": "深圳市"},
"category": "history",
"author": {"id": 1, "username": "author"},
"status": "published",
"view_count": 1000,
"like_count": 50,
"comment_count": 10,
"created_at": "2026-04-12T00:00:00Z",
"updated_at": "2026-04-12T00:00:00Z"
}
]
}
```
### 4.2 获取文章详情
**GET** `/api/articles/{id}/`
**响应:**
```json
{
"id": 1,
"title": "深圳历史",
"content": "markdown content",
"region": {"id": 1, "name": "深圳市"},
"category": "history",
"author": {"id": 1, "username": "author"},
"status": "published",
"view_count": 1000,
"like_count": 50,
"comment_count": 10,
"tags": ["历史", "文化"],
"created_at": "2026-04-12T00:00:00Z",
"updated_at": "2026-04-12T00:00:00Z"
}
```
### 4.3 创建文章
**POST** `/api/articles/`
**权限:** 认证用户
**请求:**
```json
{
"title": "string",
"content": "markdown content",
"region": 1,
"category": "history",
"tags": ["tag1", "tag2"]
}
```
### 4.4 更新文章
**PUT** `/api/articles/{id}/`
**权限:** 作者或版主或管理员
**请求:**
```json
{
"title": "string",
"content": "markdown content",
"category": "history",
"tags": ["tag1", "tag2"]
}
```
### 4.5 删除文章
**DELETE** `/api/articles/{id}/`
**权限:** 作者或版主或管理员
## 5. 特色服务 API
### 5.1 获取特色服务列表
**GET** `/api/services/`
**查询参数:**
- `region` - 版块 ID
- `category` - 分类clothing/food/accommodation/transportation/entertainment/tourism/culture
- `status` - 状态
**响应:**
```json
{
"count": 100,
"results": [
{
"id": 1,
"name": "深圳湾公园",
"region": {"id": 1, "name": "深圳市"},
"category": "tourism",
"description": "description",
"rating": 4.5,
"rating_count": 100,
"status": "published",
"created_at": "2026-04-12T00:00:00Z"
}
]
}
```
### 5.2 获取特色服务详情
**GET** `/api/services/{id}/`
**响应:**
```json
{
"id": 1,
"name": "深圳湾公园",
"description": "description",
"region": {"id": 1, "name": "深圳市"},
"category": "tourism",
"address": "地址",
"contact": "联系方式",
"images": ["url1", "url2"],
"rating": 4.5,
"rating_count": 100,
"status": "published",
"author": {"id": 1, "username": "author"},
"created_at": "2026-04-12T00:00:00Z"
}
```
### 5.3 创建特色服务
**POST** `/api/services/`
**请求:**
```json
{
"name": "string",
"description": "string",
"region": 1,
"category": "tourism",
"address": "string",
"contact": "string",
"images": ["url1", "url2"]
}
```
## 6. 互动功能 API
### 6.1 评论
**GET** `/api/comments/`
查询参数:
- `object_type` - 对象类型article/service
- `object_id` - 对象 ID
**POST** `/api/comments/`
**请求:**
```json
{
"content": "string",
"object_type": "article",
"object_id": 1
}
```
### 6.2 评分
**POST** `/api/ratings/`
**请求:**
```json
{
"score": 5,
"object_type": "service",
"object_id": 1
}
```
### 6.3 点赞
**POST** `/api/likes/`
**请求:**
```json
{
"object_type": "article",
"object_id": 1
}
```
### 6.4 收藏
**POST** `/api/favorites/`
**请求:**
```json
{
"object_type": "region",
"object_id": 1
}
```
**GET** `/api/favorites/`
获取当前用户的收藏列表
## 7. 版主管理 API
### 7.1 申请版主
**POST** `/api/moderator-applications/`
**请求:**
```json
{
"region": 1,
"reason": "申请理由"
}
```
### 7.2 获取版主申请列表
**GET** `/api/moderator-applications/`
**权限:** 管理员
### 7.3 审核版主申请
**POST** `/api/moderator-applications/{id}/review/`
**权限:** 管理员
**请求:**
```json
{
"status": "approved",
"reason": "审核意见"
}
```
### 7.4 获取版主权限
**GET** `/api/moderator-permissions/`
**权限:** 版主
## 8. GraphQL API
### 8.1 查询示例
```graphql
query {
region(id: 1) {
id
name
level
children {
id
name
}
articles {
id
title
author {
username
}
}
}
}
```
### 8.2 变更示例
```graphql
mutation {
createArticle(input: {
title: "深圳历史"
content: "内容"
region: 1
category: HISTORY
}) {
article {
id
title
status
}
}
}
```
## 9. 错误码
| 错误码 | 说明 |
|--------|------|
| `AUTH_FAILED` | 认证失败 |
| `PERMISSION_DENIED` | 权限不足 |
| `NOT_FOUND` | 资源不存在 |
| `VALIDATION_ERROR` | 参数验证错误 |
| `DUPLICATE` | 重复资源 |
| `INVALID_STATUS` | 无效状态 |
## 10. 速率限制
- 未认证用户100 请求/小时
- 认证用户1000 请求/小时
- 管理员:无限制
## 11. 版本控制
当前 API 版本:`v1`
版本格式:`/api/v1/`