v0.1 创建文档
v0.2 由于后端采用gin所以所有命名方式由小驼峰换为全小写模式。
v0.3 修改疾病史字段,改为关注疾病
v0.4 决定所有Get请求默认为参数形式,所有Post请求默认为json格式。将taboo字段从食物信息表中去掉,并加到疾病信息表中
V0.5 小程序和后端交互决定采用token方式,并且把token放在请求头中传输
v0.6 修改文档中的错误的地方和增加了2.11,2.12,2.13表
数据库类型:mysql
数据库版本号:待定
数据库库名:DietRegimen
create table user_info(
user_id int auto_increment primary key,
open_id varchar(50),
name varchar(50),
age int,
gender varchar(50),
user_image_path varchar(50),
diseases_focus text,
keywords text, #用户关键词
no_attention int,
update_time varchar(50)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
create table food_info(
food_id int auto_increment primary key,
name varchar(50),
food_kind_id int,
food_kind varchar(50),
info text, #食物介绍
effect text, #食物功效
keyword text, #食物关键词
recommend_food text #推荐食物
view_count bigint,
collect_count bigint,
photo_path varchar(50) , #食物图片路径,只有一张
voice_path varchar(50) #语音路径
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
create table disease_info(
disease_id int auto_increment primary key,
name varchar(50),
disease_kind varchar(50),
info text, #疾病介绍
taboo text, #禁忌
photo_path varchar(50) ,#疾病图片路径,只有一张
voice_path varchar(50),
view_count bigint,
collect_count bigint
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
create table food_comment_info(
id int auto_increment primary key,
food_id int,
user_id int,
user_name varchar(50),
comment text,
record_time varchar(50)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
create table disease_comment_info(
id int auto_increment primary key,
disease_id int,
user_id int,
user_name varchar(50),
comment text,
record_time varchar(50)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
create table food_kind_info(
kind_id int auto_increment primary key,
kind_name varchar(50),
kind_info text,
photo_path varchar(50),
view_count bigint
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
create table user_collect_food_info(
id int auto_increment primary key,
user_id int,
food_id int,
record_time varchar(50)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
create table user_collect_disease_info(
id int auto_increment primary key,
user_id int,
disease_id int,
record_time varchar(50)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
create table question_info(
question_id int auto_increment primary key,
info text, #问题内容
answer_a text, #问题A
response_a text, #问题A对应的响应。
answer_b text, #问题A
response_b text, #问题A对应的响应。
answer_c text, #问题A
response_c text #问题A对应的响应。
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
create table answer_sheet(
id int auto_increment primary key,
question_id int, #问题id
user_id int, #用户id
answer text, #答案
record_time varchar(50) #记录时间
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
create table disease_food_rec(
id int auto_increment primary key,
disease_id int,
food_id int,
food_name varchar(50)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
create table user_food_relation(
user_id int,
food_id int,
food_name varchar(50),
score int #相关度分值,推荐的时候按此排序
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
create table user_disease_relation(
user_id int,
disease_id int,
disease_name varchar(50),
score int #相关度分值,推荐的时候按此排序
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
code 通用返回码
Code | 说明 | 备注 |
---|---|---|
2000 | 成功 | |
4003 | 禁止访问 | |
5000 | 失败 | |
5003 | 服务器异常 | |
所有Get请求默认为参数形式,所有Post请求默认为json格式。
##3.1.管理员端接口
-
统一前缀:/DietRegimen/control1/admin/ #为了安全
-
为了简化,不设置权限分配,统一用token。(token不在文档中给出)
-
照片需要先上传得到路径后才增删修改,图片均保存为相对路径。
-
不用修改的字段默认不填。
-
所有请求Token均在header
-
修改,删除时必须给出对应id
- POST /DietRegimen/control1/admin/addUser
Request Body:{
"name":"" ,
"age":0,
"gender":"male", #male或female
"user_image_path":"",
"diseases_focus":"",
"keywords":"",
}
Resonse Body:{
"code":
"user_id":
}
- POST /DietRegimen/control1/admin/updateUser
Request Body:{
user_id:0 #用户id
"name":"" ,
"age":0,
"gender":"",
"user_image_path":"",
"diseases_focus":"",
"keywords":""
}
Resonse Body:{
"code":
}
POST /DietRegimen/control1/admin/delUser
Request Body:{
user_id:0 #用户id
}
Resonse Body:{
"code":
}
- POST /DietRegimen/control1/admin/addFood
Request Body:{
"name":"" ,
"food_kind_id":0 ,
"foodKind":"" ,
"info":"" ,
"effect":"",
"keyword":"" ,
"taboo":"",
"viewCount":0,
"photo_path":"" ,
"voicePath":""
}
Resonse Body:{
"code":
"food_id":
}
- POST /DietRegimen/control1/admin/updateFood
Request Body:{
"food_id":0, #食物id
"name":"" ,
"food_kind_id":0 ,
"foodKind":"" ,
"info":"" ,
"effect":"",
"keyword":"" ,
"taboo":"",
"viewCount":0,
"collect_count":0,
"photo_path":"" ,
"voicePath":""
}
Resonse Body:{
"code":
}
POST /DietRegimen/control1/admin/uprecordTimeFood
Request Body:{
"food_id":, #食物id
}
Resonse Body:{
"code":
}
- POST /DietRegimen/control1/admin/addDisease
Request Body:{
"name":"",
"disease_kind":"",
"voicePath":"",
"viewCount":0 ,
”collect_count“:0 ,
}
Resonse Body:{
"code":
}
- POST /DietRegimen/control1/admin/updateDisease
Request Body:{
"disease_id":0, #疾病id
"name":"",
"disease_kind":"",
"voicePath":"",
"viewCount":0 ,
”collect_count“:0 ,
}
Resonse Body:{
"code":
}
- POST /DietRegimen/control1/admin/addDiseaseFoodRec
Request Body:{
"disease_id":, #疾病id
"food_names":[] #食物名字列表
}
Resonse Body:{
"code":
}
POST /DietRegimen/control1/admin/deleteDisease
Request Body:{
"disease_id":, #疾病id
}
Resonse Body:{
"code":
}
POST /DietRegimen/control1/admin/
Request Body:{
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
POST /DietRegimen/control1/admin/
Request Body:{
"id":
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
POST /DietRegimen/control1/admin/
Request Body:{
"id":
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
POST /DietRegimen/control1/admin/
Request Body:{
"token":"", #此为管理员token
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
POST /DietRegimen/control1/admin/
Request Body:{
"token":"", #此为管理员token
"id":0
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
POST /DietRegimen/control1/admin/
Request Body:{
"token":"", #此为管理员token
"id":0
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
- POST /DietRegimen/control1/admin/addFoodKind
Request Body:{
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
- POST /DietRegimen/control1/admin/updateFoodKind
Request Body:{
"kindID":
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
POST /DietRegimen/control1/admin/
Request Body:{
"token":"", #此为管理员token
"kindID":0
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
POST /DietRegimen/control1/admin/
Request Body:{
"token":"", #此为管理员token
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
POST /DietRegimen/control1/admin/
Request Body:{
"token":"", #此为管理员token
"id":0
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
POST /DietRegimen/control1/admin/
Request Body:{
"token":"", #此为管理员token
"id":0
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
POST /DietRegimen/control1/admin/
Request Body:{
"token":"", #此为管理员token
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
POST /DietRegimen/control1/admin/
Request Body:{
"token":"", #此为管理员token
"id":0
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
POST /DietRegimen/control1/admin/
Request Body:{
"token":"", #此为管理员token
"id":0
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
- POST /DietRegimen/control1/admin/addQuestion
Request Body:{ "info":"" "answer_a":""' "response_a":"" "answer_b":"" "response_b":"" "answer_c":"" "response_c":""
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
"question_id":""
}
POST /DietRegimen/control1/admin/updateQuestion
Request Body:{
"id":0
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
POST /DietRegimen/control1/admin/deleteQuestion
Request Body:{
"id":0
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
POST /DietRegimen/control1/admin/uploadImage
Request Header:{
"token":"", #此为管理员token
}
Request Body:{
file: #文件
"num" #编号,1为用户,2为食物,3为食物种类,4为疾病
"id" #id号对应num,可能为user_id,food_id,kind_id,disease_id,
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
"path":"" #图片路径
}
eg.curl -X POST 127.0.0.1:8080/file/fileUpload -F "file=@/Users/yudaoqing/Pictures/pingguo.jpeg" -F "num=3" -F "id=3" -H "Content-Type: multipart/form-data"
curl -X POST https://api.ydq6.com/DietRegimen//control1/admin/uploadImage -F "file=@/Users/yudaoqing/go/src/github.com/TateYdq/DietRegimen/Client/imgs/diseases/tangniaobing.jpeg" -F "num=4" -F "id=1" -H "Content-Type: multipart/form-data"
POST /DietRegimen/control1/admin/downloadImage
Request Body:{
"path":"" #图片相对路径
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
"image":"" #图片
}
POST /DietRegimen/control1/admin/uprecord_timeImage
Request Body:{
"path":"" #图片路径
"image":""
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
}
统一前缀:/DietRegimen/client
所有请求Token均在Rquest Header
所有Get请求默认为参数形式,所有Post请求默认为json格式。
- POST /DietRegimen/client/user/userLogin
Request Body:{
code 登录凭证
}
Resonse Body:{
body:{
code 返回码
token
session_id
}
[注]此处可参考小程序的登录API
目前问题,照片问题。
- POST /DietRegimen/client/user/getUsertInfo
Request Body:{
token 用户token
}
Resonse Body:{
code 返回码
user_info:{} 用户详细信息
}
- GET /DietRegimen/client/user/getCollectFood
Request Body:{
token 用户token
}
Resonse Body:{
code 返回码
collect_info:{} 收藏食物信息
}
- GET /DietRegimen/client/user/getCollectDisease
Request Body:{
token 用户token
}
Resonse Body:{
code 返回码
collect_info:{} 收藏疾病信息
}
- POST /DietRegimen/client/user/updateUserInfo
Request Body:{
token 用户token
user_info 用户信息
}
Resonse Body:{
body:{
code 返回码
}
POST /DietRegimen/client/user/collectFood
Request Body:{
token 用户token
food_id 食物id
}
Resonse Body:{
code 返回码
}
- POST /DietRegimen/client/user/collecDisease
Request Body:{
disease_id 疾病id
}
Resonse Body:{
code 返回码
}
- POST /DietRegimen/client/user/uploadUserImage
Request Body:{
file: #文件
}
Resonse Body:{
"code":"2000" #2000,4003,5000,5003
"path":"" #图片路径
}
eg.curl -X POST 127.0.0.1:8080/client/user/uploadUserImage -F "file=@/Users/yudaoqing/Pictures/pingguo.jpeg" -H "token:123" -H "Content-Type: multipart/form-data"
[注]注意登录时候需要上传用户图片。
- GET /DietRegimen/client/food/getFoodDetails
Request Body:{
food_id 食物id
}
Resonse Body:{
code: 返回代码
food_detail: 食物详细信息
}
- GET /DietRegimen/client/food/getFoodCategory
Request Body:{
无
}
Resonse Body:{
code: 返回代码
food_category :{} 食物种类列表
}
- Get /DietRegimen/client/food/searchFood
Request Body:{
keyword: 关键词(单关键词,可不填写)
kindID: 种类ID(可不填写)
}
Resonse Body:{
code: 返回代码
food_list:{} 食物集合
}
- POST /DietRegimen/client/food/commentFood
Request Body:{
token 用户token
food_id 食物id
content 评论内容
}
Resonse Body:{
code 返回代码
}
- POST /DietRegimen/client/food/getComment
Request Body:{
food_id 食物id
}
Resonse Body:{
code 返回代码
comment_list:{} 评论列表
}
用下载音频接口
- GET /DietRegimen/client/health/getDiseaseDetails
Request Body:{
disease_id 疾病id
}
Resonse Body:{
code 返回代码
disease_detail 疾病详细信息
}
- GET /DietRegimen/client/health/getDiseasesLists
Request Body:{
keyword 可以不填,不填默认为空,即搜索所有疾病
}
Resonse Body:{
code 返回代码
disease_list:{} 疾病清单
}
- POST /DietRegimen/client/health/commentDisease
Request Body:{
token 用户token
disease_id 食物id
content 评论内容
}
Resonse Body:{
body:{
code 返回代码
}
- POST /DietRegimen/client/health/getComment
Request Body:{
disease_id 疾病id
}
Resonse Body:{
code 返回代码
comment_list:{} 评论列表
}
用下载音频接口
- POST /DietRegimen/client/recommend/getRecInfo
Request Body:{
token 用户token
}
Resonse Body:{
code 返回码
food_list:{} 食物清单
disease_list:{} 推荐疾病清单
}
- GET /DietRegimen/client/recommend/getQuestionnaire
Resonse Body:{
code 返回码
question_lists:[] 问卷列表
}
[注]此请求必须带token
问卷列表数组每个元素包括,info,answer_a,response_a,answer_b,response_b,answer_c,response_c
- POST /DietRegimen/client/recommend/submitQuestionnaire
Request Body:{
answer_sheets:[] 问卷回答信息
}
Resonse Body:{
code 返回码
}
answer_sheets为数组,每个元素包括question_id,answer,record_time。
其中answer为选项对应的响应。
- GET /DietRegimen/file/getImage
Request Body:{
"path":"" #图片路径
}
返回 :文件
[注]用户的头像用这个接口下载
- GET /DietRegimen/file/getVoice
Request Body:{
"path":"" #图片路径,path为数据库中存储的path
}
返回 :文件
基于安全性考虑,使用token,不适用session,JWT。
随机生成key, 关联openid,存入redis中,当请求带入key,直接从redis中获取openid得到当前用户信息,这个其实也就是我们自己去维护了会话信息
具体机制:
客户端利用微信自带wx.login接口获取code
将code传给服务器端
服务器端根据openID查找用户,
若无则根据openID创建用户并得到userID,如果用户已经存在直接得到用户的userID.
生成token,将token-userID存储在缓存里,缓存过期时间为24小时。
最后返回token
从客户端获取token加密保存在本地缓存里,以后每次会话都放在header里。
待调研决定