接口文档讲解
用户管理模块
1.1 用户注册
1.1.1 基本信息
- 请求路径:
/api/register
- 请求方式:
POST
- 接口描述:用户注册接口,传入用户名、密码、邮箱等。
1.1.2 请求参数
- 参数格式:application/json
- 参数说明:
username
: 用户名password
: 密码email
: 邮箱
1.1.3 响应数据
- 参数格式:application/json
- 参数说明:
code
: 响应码,1 代表成功,0 代表失败msg
: 提示信息data
: 返回的数据
1.1.4 请求数据样例
json
复制
{
"username": "example_username",
"password": "example_password",
"email": "example_email@example.com"
}
1.1.5 响应数据样例
json
复制
{
"code": 1,
"msg": "success",
"data": {
"user_id": 123456
}
}
1.2 用户登录
1.2.1 基本信息
- 请求路径:
/api/login
- 请求方式:
POST
- 接口描述:用户登录接口,传入用户名/邮箱和密码,返回token(JWT)。
1.2.2 请求参数
- 参数格式:application/json
- 参数说明:
username
: 用户名/邮箱password
: 密码
1.2.3 响应数据
- 参数格式:application/json
- 参数说明:
code
: 响应码,1 代表成功,0 代表失败msg
: 提示信息data
: 返回的数据,token(JWT)
1.2.4 请求数据样例
json
复制
{
"username": "example_username",
"password": "example_password"
}
1.2.5 响应数据样例
json
复制
{
"code": 1,
"msg": "success",
"data": "eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoi6YeR5bq4IiwiaWQiOjEsInVzZXJuYW1lIjoiamlueW9uZyIsImV4cCI6MTY2MjIwNzA0OH0.KkUc_CXJZJ8Dd063eImx4H9Ojfrr6XMJ-yVzaWCVZCo"
}
1.3 用户登出
1.3.1 基本信息
- 请求路径:
/api/logout
- 请求方式:
POST
- 接口描述:用户登出接口,清除会话信息。(退出登录)
1.3.2 请求参数
- 参数格式:无
1.3.3 响应数据
- 参数格式:application/json
- 参数说明:
code
: 响应码,1 代表成功,0 代表失败msg
: 提示信息data
: 返回的数据
1.3.4 请求数据样例
无
1.3.5 响应数据样例
json
复制
{
"code": 1,
"msg": "success",
"data": null
}
相关代码
以下是使用 Express 实现的用户管理模块代码,包括用户注册、登录和登出接口:
const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');
const app = express();
// 使用 bodyParser 解析 JSON 请求体
app.use(bodyParser.json()); // 新版本的node已内置对body的支持 无需 body-parser
// 模拟数据库和密钥
const users = [];
const JWT_SECRET = 'your_jwt_secret_key';
// 用户注册接口
app.post('/api/register', (req, res) => {
const { username, password, email } = req.body;
// 验证是否提供了所有必需字段
if (!username || !password || !email) {
return res.json({ code: 0, msg: 'Missing required fields', data: null });
}
// 模拟用户 ID 生成
const userId = users.length + 1;
users.push({ userId, username, password, email });
res.json({
code: 1,
msg: 'success',
data: { user_id: userId }
});
});
// 用户登录接口
app.post('/api/login', (req, res) => {
const { username, password } = req.body;
// 验证是否提供了所有必需字段
if (!username || !password) {
return res.json({ code: 0, msg: 'Missing username or password', data: null });
}
// 查找用户
const user = users.find(
(u) => (u.username === username || u.email === username) && u.password === password
);
if (!user) {
return res.json({ code: 0, msg: 'Invalid username or password', data: null });
}
// 创建 JWT token
const token = jwt.sign({ userId: user.userId, username: user.username }, JWT_SECRET, { expiresIn: '1h' });
res.json({
code: 1,
msg: 'success',
data: token
});
});
// 用户登出接口
app.post('/api/logout', (req, res) => {
// 在这里可以进行会话或 token 的清除(如果有的话)
res.json({
code: 1,
msg: 'success',
data: null
});
});
// 启动服务器
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
景点信息模块
2.1 获取单个景点的详细信息
2.1.1 基本信息
- 请求路径:
/api/attractions/{id}
- 请求方式:
GET
- 接口描述:获取单个景点的详细信息,包括名称、地址、图片、简介等。
2.1.2 请求参数
- 参数格式:路径参数
- 参数说明:
id
: 景点ID
2.1.3 响应数据
- 参数格式:application/json
- 参数说明:
code
: 响应码,1 代表成功,0 代表失败msg
: 提示信息data
: 返回的数据
2.1.4 请求数据样例
复制
/api/attractions/1
2.1.5 响应数据样例
json
复制
{
"code": 1,
"msg": "success",
"data": {
"id": 1,
"name": "景点名称",
"address": "地址",
"images": ["图片1", "图片2", "图片3"],
"introduction": "简介"
}
}
2.2 获取指定景点的评论列表
2.2.1 基本信息
- 请求路径:
/api/attractions/{id}/reviews
- 请求方式:
GET
- 接口描述:获取指定景点的评论列表,支持分页。
2.2.2 请求参数
- 参数格式:路径参数
- 参数说明:
id
: 景点ID
2.2.3 响应数据
- 参数格式:application/json
- 参数说明:
code
: 响应码,1 代表成功,0 代表失败msg
: 提示信息data
: 返回的数据
2.2.4 请求数据样例
复制
/api/attractions/1/reviews
2.2.5 响应数据样例
json
复制
{
"code": 1,
"msg": "success",
"data": {
"total": 10,
"rows": [
{
"id": 1,
"user_id": 123456,
"content": "评论内容",
"rating": 4.5,
"create_time": "2022-09-01T23:06:29"
},
{
"id": 2,
"user_id": 789012,
"content": "评论内容",
"rating": 3.0,
"create_time": "2022-09-01T23:06:29"
}
]
}
}
2.3 用户提交评论和评分
2.3.1 基本信息
- 请求路径:
/api/attractions/{id}/reviews
- 请求方式:
POST
- 接口描述:用户提交评论和评分。
2.3.2 请求参数
- 参数格式:application/json
- 参数说明:
id
: 景点IDcontent
: 评论内容rating
: 评分
2.3.3 响应数据
- 参数格式:application/json
- 参数说明:
code
: 响应码,1 代表成功,0 代表失败msg
: 提示信息data
: 返回的数据
2.3.4 请求数据样例
json
复制
{
"id": 1,
"content": "非常好,值得一去",
"rating": 5.0
}
2.3.5 响应数据样例
json
复制
{
"code": 1,
"msg": "评论成功",
"data": {
"review_id": 123456
}
}
2.4 获取景点的平均评分
2.4.1 基本信息
- 请求路径:
/api/attractions/{id}/average-rating
- 请求方式:
GET
- 接口描述:获取景点的平均评分。
2.4.2 请求参数
- 参数格式:路径参数
- 参数说明:
id
: 景点ID
2.4.3 响应数据
- 参数格式:application/json
- 参数说明:
code
: 响应码,1 代表成功,0 代表失败msg
: 提示信息data
: 返回的数据
2.4.4 请求数据样例
复制
/api/attractions/1/average-rating
2.4.5 响应数据样例
json
复制
{
"code": 1,
"msg": "success",
"data": {
"average_rating": 4.5
}
}
2.5 获取景点的图片和视频
2.5.1 基本信息
- 请求路径:
/api/attractions/{id}/media
- 请求方式:
GET
- 接口描述:获取景点的图片和视频。
2.5.2 请求参数
- 参数格式:路径参数
- 参数说明:
id
: 景点ID
2.5.3 响应数据
- 参数格式:application/json
- 参数说明:
code
: 响应码,1 代表成功,0 代表失败msg
: 提示信息data
: 返回的数据
2.5.4 请求数据样例
复制
/api/attractions/1/media
2.5.5 响应数据样例
json
复制
{
"code": 1,
"msg": "success",
"data": {
"images": ["图片1", "图片2", "图片3"],
"videos": ["视频1", "视频2", "视频3"]
}
}
相关代码
以下是使用 Koa 实现的景点信息模块代码,包括获取单个景点详情、评论列表、提交评论、平均评分和多媒体信息接口:
const Koa = require('koa');
const Router = require('@koa/router');
const bodyParser = require('koa-bodyparser');
const app = new Koa();
const router = new Router();
// 模拟数据库
const attractions = {
1: {
id: 1,
name: '景点名称',
address: '地址',
images: ['图片1', '图片2', '图片3'],
introduction: '简介',
reviews: [
{ id: 1, user_id: 123456, content: '评论内容', rating: 4.5, create_time: '2022-09-01T23:06:29' },
{ id: 2, user_id: 789012, content: '评论内容', rating: 3.0, create_time: '2022-09-01T23:06:29' },
],
media: { images: ['图片1', '图片2', '图片3'], videos: ['视频1', '视频2', '视频3'] }
}
};
// 中间件
app.use(bodyParser()); // 新版本 node 已内置 无需插件
// 获取单个景点的详细信息
router.get('/api/attractions/:id', (ctx) => {
const { id } = ctx.params;
const attraction = attractions[id];
if (attraction) {
ctx.body = { code: 1, msg: 'success', data: attraction };
} else {
ctx.body = { code: 0, msg: 'Attraction not found', data: null };
}
});
// 获取指定景点的评论列表
router.get('/api/attractions/:id/reviews', (ctx) => {
const { id } = ctx.params;
const attraction = attractions[id];
if (attraction) {
ctx.body = {
code: 1,
msg: 'success',
data: {
total: attraction.reviews.length,
rows: attraction.reviews
}
};
} else {
ctx.body = { code: 0, msg: 'Attraction not found', data: null };
}
});
// 用户提交评论和评分
router.post('/api/attractions/:id/reviews', (ctx) => {
const { id } = ctx.params;
const { content, rating } = ctx.request.body;
const attraction = attractions[id];
if (attraction && content && rating) {
const newReview = {
id: attraction.reviews.length + 1,
user_id: Math.floor(Math.random() * 1000000),
content,
rating,
create_time: new Date().toISOString()
};
attraction.reviews.push(newReview);
ctx.body = { code: 1, msg: '评论成功', data: { review_id: newReview.id } };
} else {
ctx.body = { code: 0, msg: 'Failed to submit review', data: null };
}
});
// 获取景点的平均评分
router.get('/api/attractions/:id/average-rating', (ctx) => {
const { id } = ctx.params;
const attraction = attractions[id];
if (attraction) {
const totalRating = attraction.reviews.reduce((sum, review) => sum + review.rating, 0);
const averageRating = (totalRating / attraction.reviews.length) || 0;
ctx.body = {
code: 1,
msg: 'success',
data: { average_rating: averageRating.toFixed(1) }
};
} else {
ctx.body = { code: 0, msg: 'Attraction not found', data: null };
}
});
// 获取景点的图片和视频
router.get('/api/attractions/:id/media', (ctx) => {
const { id } = ctx.params;
const attraction = attractions[id];
if (attraction) {
ctx.body = { code: 1, msg: 'success', data: attraction.media };
} else {
ctx.body = { code: 0, msg: 'Attraction not found', data: null };
}
});
// 将路由加载到应用中
app.use(router.routes()).use(router.allowedMethods());
// 启动服务器
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
旅游路线模块
3.1 获取推荐的旅游路线列表
3.1.1 基本信息
- 请求路径:
/api/routes
- 请求方式:
GET
- 接口描述:获取推荐的旅游路线列表,可以根据景点、时间、距离等过滤。
3.1.2 请求参数
- 参数格式:queryString
- 参数说明:
attraction_ids
: 景点ID列表,多个ID用逗号分隔start_time
: 开始时间end_time
: 结束时间distance
: 最大距离限制
3.1.3 响应数据
- 参数格式:application/json
- 参数说明:
code
: 响应码,1 代表成功,0 代表失败msg
: 提示信息data
: 返回的数据
3.1.4 请求数据样例
复制
/api/routes?attraction_ids=1,2,3&start_time=2022-09-01&end_time=2022-09-05&distance=50
3.1.5 响应数据样例
json
复制
{
"code": 1,
"msg": "success",
"data": [
{
"id": 1,
"name": "路线名称",
"attraction_ids": [1, 2, 3],
"start_time": "2022-09-01",
"end_time": "2022-09-05",
"distance": 50
},
{
"id": 2,
"name": "路线名称",
"attraction_ids": [1, 2, 3],
"start_time": "2022-09-01",
"end_time": "2022-09-05",
"distance": 50
}
]
}
3.2 获取单条旅游路线的详细信息
3.2.1 基本信息
- 请求路径:
/api/routes/{id}
- 请求方式:
GET
- 接口描述:获取单条旅游路线的详细信息。
3.2.2 请求参数
- 参数格式:路径参数
- 参数说明:
id
: 路线ID
3.2.3 响应数据
- 参数格式:application/json
- 参数说明:
code
: 响应码,1 代表成功,0 代表失败msg
: 提示信息data
: 返回的数据
3.2.4 请求数据样例
复制
/api/routes/1
3.2.5 响应数据样例
json
复制
{
"code": 1,
"msg": "success",
"data": {
"id": 1,
"name": "路线名称",
"attraction_ids": [1, 2, 3],
"start_time": "2022-09-01",
"end_time": "2022-09-05",
"distance": 50
}
}
相关代码
以下是使用 NestJS 实现的旅游路线模块代码,包括获取推荐路线列表和单条路线详细信息的接口:
代码结构
- Controller:定义 HTTP 请求的路由和处理逻辑。
- Service:处理业务逻辑。
- DTO:定义数据传输对象,用于校验和规范接口请求参数和响应数据格式。
Controller 和 Service 代码
创建 DTO 文件
首先,创建两个 DTO 文件,用于校验和规范接口请求参数和响应数据。
dto/get-routes.dto.ts
:
import { IsOptional, IsString, IsArray, IsNumber, IsDateString } from 'class-validator';
export class GetRoutesDto {
@IsOptional()
@IsArray()
@IsString({ each: true })
attraction_ids?: string[];
@IsOptional()
@IsDateString()
start_time?: string;
@IsOptional()
@IsDateString()
end_time?: string;
@IsOptional()
@IsNumber()
distance?: number;
}
dto/route-response.dto.ts
:
export class RouteResponseDto {
code: number;
msg: string;
data: any;
}
创建 Controller
routes.controller.ts
:
import { Controller, Get, Param, Query } from '@nestjs/common';
import { RoutesService } from './routes.service';
import { GetRoutesDto } from './dto/get-routes.dto';
import { RouteResponseDto } from './dto/route-response.dto';
@Controller('api/routes')
export class RoutesController {
constructor(private readonly routesService: RoutesService) {}
// 获取推荐的旅游路线列表
@Get()
async getRecommendedRoutes(@Query() query: GetRoutesDto): Promise<RouteResponseDto> {
const routes = await this.routesService.getRecommendedRoutes(query);
return { code: 1, msg: 'success', data: routes };
}
// 获取单条旅游路线的详细信息
@Get(':id')
async getRouteById(@Param('id') id: number): Promise<RouteResponseDto> {
const route = await this.routesService.getRouteById(id);
if (route) {
return { code: 1, msg: 'success', data: route };
} else {
return { code: 0, msg: 'Route not found', data: null };
}
}
}
创建 Service
routes.service.ts
:
import { Injectable } from '@nestjs/common';
import { GetRoutesDto } from './dto/get-routes.dto';
// 模拟数据
const routes = [
{
id: 1,
name: '路线名称1',
attraction_ids: [1, 2, 3],
start_time: '2022-09-01',
end_time: '2022-09-05',
distance: 50,
},
{
id: 2,
name: '路线名称2',
attraction_ids: [1, 2, 3],
start_time: '2022-09-01',
end_time: '2022-09-05',
distance: 50,
},
];
@Injectable()
export class RoutesService {
// 获取推荐的旅游路线列表
getRecommendedRoutes(query: GetRoutesDto) {
// 在这里根据查询参数进行过滤
let filteredRoutes = routes;
if (query.attraction_ids) {
filteredRoutes = filteredRoutes.filter(route =>
query.attraction_ids.every(id => route.attraction_ids.includes(Number(id))),
);
}
if (query.start_time) {
filteredRoutes = filteredRoutes.filter(route => route.start_time >= query.start_time);
}
if (query.end_time) {
filteredRoutes = filteredRoutes.filter(route => route.end_time <= query.end_time);
}
if (query.distance) {
filteredRoutes = filteredRoutes.filter(route => route.distance <= query.distance);
}
return filteredRoutes;
}
// 获取单条旅游路线的详细信息
getRouteById(id: number) {
return routes.find(route => route.id === id);
}
}
Module 配置
routes.module.ts
:
import { Module } from '@nestjs/common';
import { RoutesController } from './routes.controller';
import { RoutesService } from './routes.service';
@Module({
controllers: [RoutesController],
providers: [RoutesService],
})
export class RoutesModule {}
App Module 注册
在 app.module.ts
中注册 RoutesModule
。
app.module.ts
:
import { Module } from '@nestjs/common';
import { RoutesModule } from './routes/routes.module';
@Module({
imports: [RoutesModule],
})
export class AppModule {}
票务模块
4.1 获取景点的票务信息
4.1.1 基本信息
- 请求路径:
/api/tickets
- 请求方式:
GET
- 接口描述:获取景点的票务信息,包括票价、开放时间、是否有优惠等。
4.1.2 请求参数
- 参数格式:queryString
- 参数说明:
attraction_ids
: 景点ID列表,多个ID用逗号分隔
4.1.3 响应数据
- 参数格式:application/json
- 参数说明:
code
: 响应码,1 代表成功,0 代表失败msg
: 提示信息data
: 返回的数据
4.1.4 请求数据样例
复制
/api/tickets?attraction_ids=1,2,3
4.1.5 响应数据样例
json
复制
{
"code": 1,
"msg": "success",
"data": [
{
"id": 1,
"attraction_id": 1,
"ticket_type": "成人票",
"price": 100.00,
"open_time": "09:00-18:00",
"discount": true
},
{
"id": 2,
"attraction_id": 2,
"ticket_type": "儿童票",
"price": 50.00,
"open_time": "09:00-18:00",
"discount": false
},
{
"id": 3,
"attraction_id": 3,
"ticket_type": "学生票",
"price": 80.00,
"open_time": "09:00-18:00",
"discount": true
}
]
}
4.2 获取单个景点的票务详细信息
4.2.1 基本信息
- 请求路径:
/api/tickets/{id}
- 请求方式:
GET
- 接口描述:获取单个景点的票务详细信息。
4.2.2 请求参数
- 参数格式:路径参数
- 参数说明:
id
: 票务ID
4.2.3 响应数据
- 参数格式:application/json
- 参数说明:
code
: 响应码,1 代表成功,0 代表失败msg
: 提示信息data
: 返回的数据
4.2.4 请求数据样例
复制
/api/tickets/1
4.2.5 响应数据样例
json
复制
{
"code": 1,
"msg": "success",
"data": {
"id": 1,
"attraction_id": 1,
"ticket_type": "成人票",
"price": 100.00,
"open_time": "09:00-18:00",
"discount": true
}
}
5. 导航与地图模块
5.1 地图和位置
5.1.1 基本信息
请求路径:
/api/maps/{location}
请求方式:GET
接口描述:该接口用于获取指定景点或路线的地图位置,并提供路线导航。
5.1.2 请求参数
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
location | string | 必须 | 景点名称或路线ID |
请求参数样例:
bash
复制代码
/api/maps/GreatWall
5.1.3 响应数据
参数格式:application/json
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | object | 非必须 | 返回的数据 |
|- location | string | 非必须 | 景点位置的描述 |
|- route | string | 非必须 | 提供的路线导航信息 |
|- mapUrl | string | 非必须 | 地图的链接 |
响应数据样例:
json复制代码{
"code": 1,
"msg": "success",
"data": {
"location": "Great Wall, Beijing, China",
"route": "Start from Beijing, head towards the north for 30 km",
"mapUrl": "https://maps.example.com/GreatWall"
}
}
5.2 当前位置
5.2.1 基本信息
请求路径:
/api/location/current
请求方式:GET
接口描述:该接口用于获取用户当前的位置,位置数据来源于腾讯地图。
5.2.2 请求参数
无
5.2.3 响应数据
参数格式:application/json
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | object | 非必须 | 返回的数据 |
|- latitude | number | 非必须 | 当前纬度 |
|- longitude | number | 非必须 | 当前经度 |
响应数据样例:
json复制代码{
"code": 1,
"msg": "success",
"data": {
"latitude": 39.9042,
"longitude": 116.4074
}
}
6. 活动与促销模块
6.1 获取活动信息
6.1.1 获取景点附近或景点本身的活动信息
请求路径:
GET /api/events
请求方式:GET
接口描述:获取景点附近或指定景点的活动信息,如节庆活动、演出等。
6.1.2 请求参数
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
location | string | 可选 | 景点名称,若不指定,获取全城的活动。 |
radius | number | 可选 | 半径,单位米,指定获取某个范围内的活动,默认为1000米。 |
type | string | 可选 | 活动类型,如“节庆”、“演出”等,默认获取所有活动类型。 |
startDate | string | 可选 | 活动开始日期,格式为YYYY-MM-DD ,用于筛选活动。 |
endDate | string | 可选 | 活动结束日期,格式为YYYY-MM-DD ,用于筛选活动。 |
6.1.3 响应数据
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | array | 必须 | 活动信息列表 |
|- id | string | 必须 | 活动ID |
|- name | string | 必须 | 活动名称 |
|- type | string | 必须 | 活动类型 |
|- startDate | string | 必须 | 活动开始日期,格式为YYYY-MM-DD |
|- endDate | string | 必须 | 活动结束日期,格式为YYYY-MM-DD |
|- location | string | 必须 | 活动地点 |
|- description | string | 可选 | 活动描述 |
|- imageUrl | string | 可选 | 活动图片URL |
响应数据样例:
json复制代码{
"code": 1,
"msg": "success",
"data": [
{
"id": "event_123",
"name": "长城音乐节",
"type": "演出",
"startDate": "2024-11-15",
"endDate": "2024-11-17",
"location": "北京-长城",
"description": "为期三天的音乐盛宴,现场有众多知名艺人参与。",
"imageUrl": "https://example.com/event_123_image.jpg"
},
{
"id": "event_124",
"name": "北京春节庙会",
"type": "节庆",
"startDate": "2024-02-10",
"endDate": "2024-02-17",
"location": "北京-地坛公园",
"description": "传统的春节庙会,丰富多彩的民间艺术和手工艺展示。",
"imageUrl": "https://example.com/event_124_image.jpg"
}
]
}
6.2 获取单个活动的详细信息
6.2.1 请求路径
请求路径:
GET /api/events/{id}
请求方式:GET
接口描述:获取指定活动的详细信息。
6.2.2 请求参数
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
id | string | 必须 | 活动ID |
请求参数样例:
bash
复制代码
GET /api/events/event_123
6.2.3 响应数据
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | object | 必须 | 活动详细信息 |
|- id | string | 必须 | 活动ID |
|- name | string | 必须 | 活动名称 |
|- type | string | 必须 | 活动类型 |
|- startDate | string | 必须 | 活动开始日期 |
|- endDate | string | 必须 | 活动结束日期 |
|- location | string | 必须 | 活动地点 |
|- description | string | 必须 | 活动详细描述 |
|- imageUrl | string | 可选 | 活动图片URL |
|- tickets | array | 可选 | 票务信息,如票价、购票链接等 |
响应数据样例:
json复制代码{
"code": 1,
"msg": "success",
"data": {
"id": "event_123",
"name": "长城音乐节",
"type": "演出",
"startDate": "2024-11-15",
"endDate": "2024-11-17",
"location": "北京-长城",
"description": "为期三天的音乐盛宴,现场有众多知名艺人参与。",
"imageUrl": "https://example.com/event_123_image.jpg",
"tickets": [
{
"type": "VIP",
"price": 1000,
"link": "https://example.com/tickets/vip"
},
{
"type": "普通票",
"price": 300,
"link": "https://example.com/tickets/normal"
}
]
}
}
6.3 优惠券和促销
6.3.1 获取用户优惠券信息
请求路径:
GET /api/coupons
请求方式:GET
接口描述:获取当前用户的优惠券信息,包括已领取、已过期和未使用的优惠券。
6.3.2 请求参数
无
6.3.3 响应数据
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | array | 必须 | 优惠券信息列表 |
|- id | string | 必须 | 优惠券ID |
|- discount | number | 必须 | 优惠券折扣,如10表示10%的折扣 |
|- type | string | 必须 | 优惠券类型,如“满减”、“折扣” |
|- validUntil | string | 必须 | 有效期,格式为YYYY-MM-DD |
响应数据样例:
json复制代码{
"code": 1,
"msg": "success",
"data": [
{
"id": "coupon_123",
"discount": 10,
"type": "折扣",
"validUntil": "2024-12-31"
},
{
"id": "coupon_124",
"discount": 50,
"type": "满减",
"validUntil": "2024-11-30"
}
]
}
6.3.2 用户兑换优惠券
请求路径:
POST /api/coupons/redeem
请求方式:POST
接口描述:用户兑换优惠券,需传入优惠券ID进行兑换。
6.3.3 请求参数
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
couponId | string | 必须 | 要兑换的优惠券ID |
请求体示例:
json复制代码{
"couponId": "coupon_123"
}
6.3.4 响应数据
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
响应数据样例:
json复制代码{
"code": 1,
"msg": "兑换成功"
}
json复制代码{
"code": 1,
"msg": "success",
"data": {
"id": 1,
"name": "Spring Festival at Great Wall",
"description": "Join us to celebrate the Spring Festival at the iconic Great Wall of China with traditional performances and food.",
"startTime": "2024-02-01T10:00:00",
"endTime": "2024-02-01T18:00:00",
"location": "Great Wall, Beijing"
}
}
7. 数据统计与分析模块
7.1 景点流量统计
7.1.1 获取景点的访问量、评分统计
请求路径:
GET /api/stats/attractions/{id}
请求方式:GET
接口描述:获取指定景点的访问量、评分统计等信息,帮助分析景点的受欢迎程度。
7.1.2 请求参数
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
id | string | 必须 | 景点ID(唯一标识符) |
请求路径示例:
bash
复制代码
GET /api/stats/attractions/attraction_123
7.1.3 响应数据
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | object | 必须 | 景点流量和评分统计数据 |
|- visitCount | number | 必须 | 景点的访问总量 |
|- avgRating | number | 必须 | 景点的平均评分(1-5) |
|- reviewsCount | number | 必须 | 用户评分的总数 |
|- peakTime | string | 可选 | 访问量最高的时间段(如“周末”) |
|- ratingBreakdown | object | 可选 | 各个评分段的分布(如:5星、4星等) |
响应数据样例:
json复制代码{
"code": 1,
"msg": "success",
"data": {
"visitCount": 1200,
"avgRating": 4.5,
"reviewsCount": 350,
"peakTime": "周末",
"ratingBreakdown": {
"5stars": 200,
"4stars": 120,
"3stars": 30,
"2stars": 10,
"1star": 5
}
}
}
7.2 用户行为数据
7.2.1 分析用户行为,如最常访问的景点、路线、时间等
请求路径:
GET /api/stats/users
请求方式:GET
接口描述:获取用户行为分析数据,帮助了解用户兴趣、活动习惯等。
7.2.2 请求参数
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
userId | string | 可选 | 用户ID,如果未传,则返回所有用户的行为数据 |
startDate | string | 可选 | 数据分析的开始日期,格式为YYYY-MM-DD |
endDate | string | 可选 | 数据分析的结束日期,格式为YYYY-MM-DD |
请求路径示例:
bash
复制代码
GET /api/stats/users?userId=user_123&startDate=2024-01-01&endDate=2024-11-01
7.2.3 响应数据
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | object | 必须 | 用户行为数据 |
|- mostVisitedAttractions | array | 必须 | 用户最常访问的景点列表 |
|- mostVisitedRoutes | array | 可选 | 用户最常使用的游览路线 |
|- visitTimes | object | 可选 | 用户的访问时间统计(如:访问频率等) |
响应数据样例:
json复制代码{
"code": 1,
"msg": "success",
"data": {
"mostVisitedAttractions": [
{
"attractionId": "attraction_123",
"attractionName": "长城",
"visitCount": 50
},
{
"attractionId": "attraction_124",
"attractionName": "故宫博物院",
"visitCount": 45
}
],
"mostVisitedRoutes": [
{
"routeId": "route_1",
"routeName": "长城-故宫一日游",
"visitCount": 30
}
],
"visitTimes": {
"weekdays": "40%",
"weekends": "60%"
}
}
}
8. 后台管理模块
8.1 管理员登录
8.1.1 请求路径
请求路径:
POST /api/admin/login
请求方式:POST
接口描述:管理员登录,获取权限信息。
8.1.2 请求参数
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
username | string | 必须 | 管理员的用户名 |
password | string | 必须 | 管理员的密码 |
请求体示例:
json复制代码{
"username": "admin",
"password": "admin123"
}
8.1.3 响应数据
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | object | 必须 | 登录成功后的管理员权限信息 |
|- token | string | 必须 | 用于后续请求的认证Token |
响应数据样例:
json复制代码{
"code": 1,
"msg": "登录成功",
"data": {
"token": "abcdef1234567890"
}
}
8.2 景点管理
8.2.1 添加或更新景点信息
请求路径:
POST /api/admin/attractions
请求方式:POST
接口描述:管理员添加或更新景点信息。
8.2.2 请求参数
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
name | string | 必须 | 景点名称 |
location | string | 必须 | 景点所在的地理位置(城市、区县等) |
description | string | 可选 | 景点描述 |
imageUrl | string | 可选 | 景点的图片URL |
coordinates | object | 可选 | 景点的经纬度信息 |
|- lat | number | 可选 | 纬度 |
|- lon | number | 可选 | 经度 |
请求体示例:
json复制代码{
"name": "长城",
"location": "北京",
"description": "中国著名的历史遗址。",
"imageUrl": "https://example.com/longwall.jpg",
"coordinates": {
"lat": 40.4319,
"lon": 116.5704
}
}
8.2.3 响应数据
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | object | 必须 | 操作成功后的景点信息 |
响应数据样例:
json复制代码{
"code": 1,
"msg": "景点添加成功",
"data": {
"id": "attraction_123",
"name": "长城",
"location": "北京",
"description": "中国著名的历史遗址。",
"imageUrl": "https://example.com/longwall.jpg",
"coordinates": {
"lat": 40.4319,
"lon": 116.5704
}
}
}
8.2.4 删除景点
请求路径:
DELETE /api/admin/attractions/{id}
请求方式:DELETE
接口描述:管理员删除指定的景点信息。
8.2.5 请求参数
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
id | string | 必须 | 景点ID(唯一标识符) |
请求路径示例:
bash
复制代码
DELETE /api/admin/attractions/attraction_123
8.2.6
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | object | 可选 | 删除操作的结果信息 |
响应数据样例:
json复制代码{
"code": 1,
"msg": "景点删除成功",
"data": {
"id": "attraction_123",
"name": "长城"
}
}
8.3 订单管理
8.3.1 查看所有用户订单
请求路径:
GET /api/admin/orders
请求方式:GET
接口描述:管理员查看所有用户订单,支持查询、修改订单状态等操作。
8.3.2 请求参数
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
status | string | 可选 | 订单状态,支持all (所有)、pending (待付款)、completed (已完成)、canceled (已取消) |
startDate | string | 可选 | 查询的开始日期,格式为YYYY-MM-DD |
endDate | string | 可选 | 查询的结束日期,格式为YYYY-MM-DD |
userId | string | 可选 | 用户ID(查询指定用户的订单) |
请求路径示例:
bash
复制代码
GET /api/admin/orders?status=pending&startDate=2024-01-01&endDate=2024-11-01
8.3.3 响应数据
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | array | 必须 | 订单列表 |
|- orderId | string | 必须 | 订单ID |
|- userId | string | 必须 | 用户ID |
|- attractionId | string | 必须 | 景点ID |
|- orderStatus | string | 必须 | 订单状态(如pending 、completed 、canceled ) |
|- orderDate | string | 必须 | 订单创建日期,格式为YYYY-MM-DD |
响应数据样例:
json复制代码{
"code": 1,
"msg": "查询成功",
"data": [
{
"orderId": "order_123",
"userId": "user_123",
"attractionId": "attraction_123",
"orderStatus": "pending",
"orderDate": "2024-10-01"
},
{
"orderId": "order_124",
"userId": "user_124",
"attractionId": "attraction_124",
"orderStatus": "completed",
"orderDate": "2024-10-02"
}
]
}
8.3.4 修改订单状态
请求路径:
PUT /api/admin/orders/{orderId}
请求方式:PUT
接口描述:管理员修改指定订单的状态。
8.3.5 请求参数
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
orderStatus | string | 必须 | 订单状态(pending 、completed 、canceled ) |
请求路径示例:
bash
复制代码
PUT /api/admin/orders/order_123
请求体示例:
json复制代码{
"orderStatus": "completed"
}
8.3.6 响应数据
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | object | 必须 | 修改后的订单信息 |
响应数据样例:
json复制代码{
"code": 1,
"msg": "订单状态更新成功",
"data": {
"orderId": "order_123",
"orderStatus": "completed"
}
}
9. 消息通知模块
9.1 发送推送通知
9.1.1 请求路径
请求路径:
POST /api/notifications/send
请求方式:POST
接口描述:向用户发送推送通知,通知内容可以是活动促销、景点更新等信息。
9.1.2 请求参数
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
userId | string | 必须 | 用户ID |
title | string | 必须 | 通知标题 |
message | string | 必须 | 通知内容 |
type | string | 可选 | 通知类型(如promotion 、update ) |
url | string | 可选 | 需要跳转的URL地址 |
请求体示例:
json复制代码{
"userId": "user_123",
"title": "特价促销活动",
"message": "景点门票现有折扣,快来抢购!",
"type": "promotion",
"url": "https://example.com/promotion"
}
9.1.3 响应数据
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | object | 可选 | 发送的通知详情 |
响应数据样例:
json复制代码{
"code": 1,
"msg": "通知发送成功",
"data": {
"notificationId": "notif_123",
"userId": "user_123",
"title": "特价促销活动",
"message": "景点门票现有折扣,快来抢购!",
"url": "https://example.com/promotion"
}
}
9.2 系统通知
9.2.1 获取用户的系统通知
请求路径:
GET /api/notifications
请求方式:GET
接口描述:获取指定用户的所有系统通知,通常是系统更新、维护等重要消息。
9.2.2 请求参数
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
userId | string | 必须 | 用户ID |
请求路径示例:
bash
复制代码
GET /api/notifications?userId=user_123
9.2.3 响应数据
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | number | 必须 | 响应码,1 代表成功,0 代表失败 |
msg | string | 非必须 | 提示信息 |
data | array | 必须 | 用户的系统通知列表 |
|- notificationId | string | 必须 | 通知ID |
|- title | string | 必须 | 通知标题 |
|- message | string | 必须 | 通知内容 |
|- timestamp | string | 必须 | 通知时间,格式为YYYY-MM-DD HH:mm:ss |
响应数据样例:
json复制代码{
"code": 1,
"msg": "查询成功",
"data": [
{
"notificationId": "notif_123",
"title": "系统更新",
"message": "我们的服务将在今晚进行维护,预计10小时。",
"timestamp": "2024-11-10 22:00:00"
},
{
"notificationId": "notif_124",
"title": "新的活动上线",
"message": "查看我们的最新节庆活动,优惠券大放送。",
"timestamp": "2024-11-11 10:00:00"
}
]
}
原文地址:https://blog.csdn.net/XiugongHao/article/details/143730626
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!