后端接口规格说明 - SE2020-TopUnderstanding/BUAA-Campus-Tools-Backend GitHub Wiki

Index
接口说明文档
1. 接口规格
2.Alpha阶段接口
  课表查询接口
   前端-课表查询接口(get请求)
   前端-课表查询接口2(get请求)
   爬虫-添加课表接口(post请求)
   爬虫-添加课表接口(post请求)
  成绩查询接口
   前端-成绩查询接口(get请求):
   前端-GPA查询接口(get请求):
   前端-加权评价分查询接口(get请求):
   爬虫-添加成绩接口(post请求):
  消息队列接口
   爬虫-获取消息队列的请求(get方法):
   前端-查询对应id的请求是否已完成(get方法)
   爬虫-反馈已完成任务的id(post请求)
   前端-请求更新某功能的数据
  登录功能
   前端-用户登录接口(post请求)
   爬虫-获取用户数据接口(get请求)
  ddl接口
   前端-ddl查询接口(get请求)
   爬虫-插入ddl接口(POST)
  空教室
   前端-获取空教室信息(GET)
   爬虫-插入空教室数据(POST)
  版本数据库接口
   前端-获取最新版本信息(GET)
   管理员-插入最新版本信息(POST)
  爬虫相关功能
   爬虫-删除某个学生在数据库中数据(POST)
3.Beta阶段功能接口
  课程评价功能:
   前端-search接口(get请求)
   前端-search接口-default(get请求)
   前端-student接口(get请求)
   前端-student接口(post请求)
   前端-student接口(put请求)
   前端-student接口(delete请求)
   前端-teacher接口(post请求)
  校历功能:
   前端-获取校历信息(GET)
   管理员-插入校历信息(POST)
  用户反馈功能
   前端-插入用户反馈内容(POST)
   管理员-获取用户反馈内容(GET)
  爬虫相关功能:
   管理员-获取爬虫更新数据最新时间(GET)

# 请求方法 请求路径 用途
1 get 127.0.0.1:8000/timetable 获取课表
2 post 127.0.0.1:8000/timetable 增加数据/请求更新
3 get 127.0.0.1:8000/score 获取成绩
4 post 127.0.0.1:8000/score 增加数据
5 get 127.0.0.1:8000/tests 获取考期表
6 post 127.0.0.1:8000/tests 增加数据
7 get 127.0.0.1:8000/request 获取请求
8 post 127.0.0.1:8000/request 完成请求反馈
9 post 127.0.0.1:8000/request/timetable/ 请求更新课表
10 post 127.0.0.1:8000/request/score/ 请求更新成绩
11 post 127.0.0.1:8000/request/ddl/ 请求更新ddl
12 post 127.0.0.1:8000/request/empty_room/ 请求更新空教室
13 post 127.0.0.1:8000/login/ 登录
14 get 127.0.0.1:8000/classroom/ 空教室查询
15 get 127.0.0.1:8000/ddl/ ddl查询
16 get 127.0.0.1:8000/login/ 获取所有用户名密码
17 post 127.0.0.1:8000/classroom/ 添加空教室数据
18 post 127.0.0.1:8000/ddl/ 添加ddl数据
19 get 127.0.0.1:8000/timetable/search/ 查询课程
20 get/post/put/delete 127.0.0.1:8000/timetable/evaluation/student/ 课程评价相关接口
21 post 127.0.0.1:8000/timetable/evaluation/teacher/ 教师评价相关接口
22 get/post 127.0.0.1:8000/ddl/Calendar/ 校历相关接口
23 get/post 127.0.0.1:8000/feedback/ 用户反馈相关接口
24 get 127.0.0.1:8000/spider/update/ 管理员获取爬虫更新数据最新时间
  • 服务器IP地址(仅作举例):127.0.0.1:8000
  • 用于查询课表

  • 访问方法:

    127.0.0.1:8000/timetable/?student_id=(:id)&week=(:week)

  • 参数说明:

    • student_id: 表示所查询学生的学号,必须为密文
    • week: 表示所查询的周数,例如3,或者all,表示查询总课表
  • 返回值:

    • 200:请求成功,并返回信息(json格式):
    [
        {
            "name": "计算机网络",
            "teacher_course": [
                {
                    "name": "罗洪斌"
                }
                {
                    "name": "张辉"
                }
            ],
            "time": "周2 第1,2节",
            "place": "(一)301",
            "week": "1,2,3,4,5,6,7,8,9,",
            "semester": "2020_Spring"
        }
    ]
    • 400:请求失败,参数个数不正确或参数内容不正确

      ​ 例:127.0.0.1:8000/timetable/?student_id=17373456

      ​ 或:127.0.0.1:8000/timetable/?love_you=17373456

    • 401:学生不存在

  • 用于查询当前日期对应的周号

  • 访问方法:

    127.0.0.1:8000/timetable/?date=(Y-m-d)

  • 参数说明:

    • date: 表示日期#格式为Y-m-d,例如2020-4-21
  • http返回值:

    • 200:表示成功,返回对应周数信息
    [
        {
            "week": "1"
        }
    ]
    • 400:参数错误,或数量不正确
  • 用于添加课表

  • 访问格式:

    127.0.0.1:8000/timetable/

    附带json信息格式:

    • 第一项:'student_id' = (:id)
    • 第二项:info列表, info里包含每一节课的信息,若有多节课则按列表排列(按顺序,5项):
      • 课程名称
      • 课程地点
      • 课程教师
      • 课程持续周
      • 课程时间
    {
        "student_id": "17373010", 
        "info": [
        [
                [
                    "计算机网络", 
                    "(一)301", 
                    "罗洪斌", 
                    "1-9", 
                    "周2 第1,2节"
                ]
            ]
    }
  • http返回值:

    • 201:表示成功创建
    • 400:表示json文件没有按照约定的格式传输
    • 401:表示没有找到请求创建的学生信息
  • 用于添加课程

  • 访问格式

    127.0.0.1:8000/timetable/add_course/

    附带json信息格式:

    {
        "info": [
            [
                "体育(6)",
                "B2E333060",
                "0.5",
                "",
                "体育部",
                "体育类",
                "刘菁"
            ],
            [
                "博雅课程(文化素质拓展)(6)",
                "B2H513060",
                "0.5",
                "32",
                "学生处武装部",
                "博雅类",
                ""
            ]
        ]
    }
    
  • http返回值:

    • 201:成功创建
    • 400:参数错误
  • 用于查询某个用户的成绩

  • 访问方法:

    127.0.0.1:8000/score/?student_id=(:id)&semester=(:semester)

  • 参数说明:

    • student_id: 表示所查询学生的学号,例如17373333
    • semester: 表示所查询的周数,例如2017秋季
  • http返回值:

    • 200:请求成功,并返回信息(json格式):
    [
        {
            "course_name": "工科数学分析(1)",
            "credit": 6.0,
            "score": 44
        }
    ]
    • 400:请求失败,参数个数不正确或参数内容不正确
    • 401:学生不存在
  • 用于查询某个学生的GPA

  • 访问方法:

    127.0.0.1:8000/score/gpa/?student_id=(:id)

  • 参数说明:

    • student_id: 表示所查询学生的学号,例如17373333
  • http返回值:

    • 200:成功
    {
        "gpa": 4.0000000
    }
    
    • 401:没有请求的学生
    • 400:请求错误
  • 用于查询加权平均分

  • 访问方式:

    127.0.0.1:8000/score/avg_score/?student_id=(:id)

  • 参数说明:

    • student_id: 表示所查询学生的学号,例如17373333
  • http返回值:

    • 200:成功
    {
        "score": 100.000000000000
    }
    
    • 401:没有请求的学生
    • 400:请求错误
  • 用于爬虫添加成绩

  • 访问方式:

    127.0.0.1:8000/score/ 附带json格式的信息

    json信息格式:

    • 第一项:'student_id' = (:id)
    • 第二项:'semester' = (:semester)
    • 第三项:info列表, 每个info里包含每个成绩的信息(按顺序,5项):
      • 课程bid
      • 课程名称
      • 课程学分
      • 课程成绩
    {
        "student_id": "17373010", 
        "semember": "2017秋季", 
        "info": [
            [
                "B1A09104A", 
                "工科数学分析(1)", 
                "6.0", 
                "44"
            ]
        ]
    }
  • http返回值:

    • 201:表示成功创建
    • 400:表示json文件没有按照约定的格式传输
    • 401:表示没有找到请求创建的学生信息
  • 用于获取消息队列的请求

  • 访问方法:

    127.0.0.1:8000/request/

  • http返回值:

    • 200:成功,返回请求的具体信息
    {'req_id': req_id, 'usr_name': student.usr_name, 'password': student.usr_password,
    'req_type': req_type}
    
    • 204:成功,但是没有需要处理的请求
  • 用于查询对应id的请求是否已完成

  • 访问方式:

    127.0.0.1:8000/request/?id=(:id)

  • 参数列表:

    • id:req_id
  • http返回值:

    • 200:成功,返回信息

      [
      	{
      		"status" = true/false
      	}
      ]
      
    • 400:参数不正确

  • 爬虫反馈某任务已完成

  • 访问方法:

    127.0.0.1:8000/request/ json格式:

    [
    	{
    		"req_id" = 14
    	}
    ]
  • http返回值:

    • 200:成功
    • 404:找不到这个id的请求
    • 400:参数错误
  • 请求更新某功能的数据

  • 访问方法:

    127.0.0.1:8000/request/(timetable/score/ddl/emptyroom/)/?student_id=(:id)

  • http返回值:

    • 200:成功,返回请求的id
    [
    	{
    		"id" = 1
    	}
    ]
    
    • 400:参数错误
    • 401:未找到该学号的同学的信息
  • 根据用户给的用户名和密码登录

  • 访问方法

    127.0.0.1:8000/login/

    {
    	usr_name: "mushan",
    	usr_password: "132"
    }
    
  • 参数说明:

    • usr_name:统一认证用户名
    • usr_password: 统一认证用户密码
  • http返回值

    • 200:成功,返回数据

      {
          "name": "胡彬彬",
          "state": 1,
          "student_id": "17373349"
      }
      
    • 400:参数错误

    • 401:所给账号密码错误

    • 460:账号被锁

    • 461:服务器ip被锁

  • 按照给定访问密码获取用户数据

  • 访问方法

    • 获取某个服务器的用户名和密码 127.0.0.1:8000/login/?password=123&number=1
    • 获取所有用户名和密码 127.0.0.1:8000/login/?password="123"
  • 参数说明:

    • password 密码正确才允许访问
    • number 第几台服务器
  • http返回值

    • 200:成功,返回数据

      [
          {
              "usr_name": "hhh",
              "usr_password": "h101"
          },
          {
              "usr_name": "mushan",
              "usr_password": "h102"
          }
      ]
      
    • 462:密码错误

  • 获得某个学生课程中心ddl

  • 访问方法

    127.0.0.1:8000/ddl/?student_id=17373349

  • 参数说明

    • student_id:学生学号
  • http返回值

    • 200:成功,返回数据

      爬虫爬取成功
      [
          {
              "name": "计算机科学方法论",
              "content": [
                  {
                      "homework": "第二次作业",
                      "ddl": "2020-04-23 02:03:00",
                      "state": "未提交"
                  },
                  {
                      "homework": "第一次作业",
                      "ddl": "2020-04-28 04:03:00",
                      "state": "提交"
                  }
              ]
          },
          {
              "name": "计算机图形学",
              "content": [
                  {
                      "homework": "第一次作业",
                      "ddl": "2020-04-23 04:03:00",
                      "state": "提交"
                  }
              ]
          }
      ]
      爬虫爬取失败
      [
          {
              "name": "错误",
              "content": [
                  {
                      "homework": "抱歉,我们暂时无法获取您的ddl信息。\\n为解决此问题,请在课程中心的用户偏好标签页面保证您所需爬取的课程都属于收藏站点或活跃站点,并且活跃站点不要为空",
                      "ddl": "",
                      "state": "错误"
                  }
              ]
          }
      ]
      
    • 400:参数错误

    • 401:数据库中无该学生数据

  • 在数据库中插入某个学生课程中心数据

  • 访问方法

    127.0.0.1:8000/ddl/

            {
                "student_id":"17373349",
                "ddl":[
                        {
                            "content":[
                                {
                                    "ddl":"2020-3-19 下午11:55",
                                    "homework":"第一次作业",
                                    "state":"提交"
                                },
                                {
                                    "ddl":"2020-3-19 下午11:55",
                                    "homework":"第二次作业",
                                    "state":"未提交"
                                }
                            ],
                            "name":"计算机科学方法论"
                        },
                        {
                            "content":[
                                {
                                    "ddl":"2020-3-19 下午11:55",
                                    "homework":"第一次作业",
                                    "state":"提交"
                                }
                            ],
                            "name":"计算机图形学"
                        }
                    ]
            }
    
  • http返回值

    • 200:成功
    • 400:给定jasn包格式有问题
    • 401:数据库中无该学生信息
  • 根据具体条件获取空教室的信息

  • 访问方法

    127.0.0.1:8000/classroom/?campus=学院路校区&date=2020-04-20&section=1, 2, 3,

  • 参数说明

    • campus:校区
    • date:哪一天的空教室
    • 具体节数
  • http返回值

    • 200:成功,返回数据

      {
          "一号楼": [
              {
                  "classroom": "(一)203"
              },
              {
                  "classroom": "(一)205"
              }
          ]
      }
      
    • 400:参数错误

  • 插入所有空教室信息

  • 访问方法

    127.0.0.1:8000/classroom/

    [
                    {
                        "campus":"学院路校区",
                        "content":[
                            {
                                "teaching_building":"一号楼",
                                "classroom":"(一)203",
                                "date":"2020-04-20",
                                "section":"1,2,3,4,5,7,"
                            },
                            {
                                "teaching_building":"一号楼",
                                "classroom":"(一)204",
                                "date":"2020-04-20",
                                "section":"1,2,3,4,7,"
                            }
                            {
                                "teaching_building":"三号楼",
                                "classroom":"(三)202",
                                "date":"2020-04-20",
                                "section":"3,4,5,7,8,"
                            }
                        ]
                    },
                    {
                        "campus":"沙河校区",
                        "content":[
                            {
                                "teaching_building":"三号楼",
                                "classroom":"(三)202",
                                "date":"2020-04-20",
                                "section":"3,4,5,7,8,"
                            }
                        ]
                    }
    ]
    
  • http返回值

    • 200:成功
    • 400:给定json包格式有问题
  • 获得最新版本信息

  • 访问方法

    127.0.0.1:8000/version/

  • http返回值

    • 200,成功,返回数据

      {
          "version_number": "1.1.1",
          "update_date": "2020",
          "announcement": "hh",
          "download_address": "22"
      }
      
    • 400,参数不为0

  • 插入最新版本信息

  • 访问方法

    127.0.0.1:8000/version/

    {
        "version_number": "1.1.1",
        "update_date": "2020",
        "announcement": "hh",
        "download_address": "22"
    }
    
  • http返回值

    • 200,成功
    • 400,参数错误或版本号已有
  • 学生数据被更改,导致登录不上从而删除

  • 访问方法

    127.0.0.1:8000/spider/delete/

    {
    	"usr_name":"mushan",
    	"password":"1",
          "error_type":1
    }
    
  • 参数说明

    • error_type: 1代表账号被锁立即删除,0代表账号密码错误,错误两次及以上才删除
  • http返回值

    • 200,成功
    • 400,json包格式有问题
  • 根据用户给定的输入查询课程评价信息

  • 访问方法:

    127.0.0.1:8000/timetable/search/?course=:course_name&teacher=:teacher_name&type=:type&department=:department

  • 参数说明:

    • course:用户输入的想查询的课程
    • teacher:用户输入的想查询的老师姓名
    • type:用户选择的课程类别
    • department:课程开课院系
    • course和teacher均支持不完全查询
  • 返回值:

    • 200:成功,返回查询结果。
    举例:
    http://127.0.0.1:8000/timetable/search/?course=计&teacher=罗&type=核心专业类&department=计算机学院
    返回:
    [
        {
            "bid": "111",
            "course_name": "计算机网络",
            "teacher": "罗洪斌",
            "credit": "2.0",
            "department": "计算机学院",
            "avg_score": 2.5
        }
    ]    
    
    • 400:参数名称或者数目错误。
  • 当用户未搜索时返回的内容

  • 访问方法:

    127.0.0.1:8000/timetable/search/default/?student_id=:student_id

  • 参数说明:

    • student_id:当前用户的学号
  • 返回值:

    • 200:成功
    (同search)
    [
        {
            "bid": "111",
            "course_name": "计算机网络",
            "teacher": "张辉",
            "credit": "2.0",
            "department": "计算机学院",
            "avg_score": 2.5
        }
    ]
    
    • 400:参数数量或名称错误
    • 401:用户不存在
  • 根据用户选择的课程评价,展示其内容

  • 访问方法:

    127.0.0.1:8000/timetable/evaluation/student/?bid=:bid&student_id=:id

  • 参数说明:

    • bid:要查询课程评价的bid
    • student_id: 用户的学号
  • 返回值:

    • 200:成功
    举例:
    http://127.0.0.1:8000/timetable/evaluation/student/?bid=111
    返回:
    {
        "course_name": "计算机网络",
        "evaluation_num": 2,
        "avg_score": 3.5,
        "teacher_info": [
            {
                "id": 35,
                "teacher_name": "罗洪斌",
                "up": 0,
                "has_up": false
            },
            {
                "id": 52,
                "teacher_name": "张辉",
                "up": 1,
                "has_up": true
            },
            {
                "id": 53,
                "teacher_name": "罗洪兵",
                "up": 0,
                "has_up": false
            }
        ],
        "info": [
            {
                "id": 4,
                "student": "17373456",
                "score": 4,
                "updated_time": "2020-05-14T22:56:18.714919",
                "evaluation": "ahhhhhhh",
                "up": 0,
                "down": 1,
                "has_up": false,
                "has_down": true
            },
            {
                "id": 5,
                "student": "17373010",
                "score": 3,
                "updated_time": "2020-05-14T22:51:20.615428",
                "evaluation": "ahhhhhhh",
                "up": 0,
                "down": 0,
                "has_up": false,
                "has_down": false
            }
        ]
        "score_info": [
        	1,
        	2,
        	3,
        	4,
        	5
        ]
    }
    up为点赞数,down为被踩数,evaluation为评价内容。
    
    • 400:参数数量或名称错误
    • 401:用户不存在
  • 通过这个接口给评价点赞/加踩

  • 访问方法:

    127.0.0.1:8000/timetable/evaluation/student/(up/cancel_up/down/cancel_down)

    附加post信息格式:

    {
    	"student_id": 17373456,
    	"actor": 17373010,
    	"bid": "B3A233300"
    }
    student_id,该评价的作者学生学号
    actor,表示点赞/加踩人的学号
    bid,代表课程号
    有"up"(点赞),"cancel_up"(取消点赞),"down"(踩), "cancel_down"(取消踩)四种动作。
    
  • 返回值:

    • 201:点赞/加踩/取消点赞/取消加踩成功
    返回内容
    返回值:201/202
    {
    	"up": 1,
    	"down": 2
    }
    
    • 202:该学生已经点过赞,不予操作
    • 400:参数个数或名称错误
    • 401:数据库中没有这个学生
    • 404:数据库中没有这个课程/老师/课程评价/点赞记录/加踩记录
  • 通过这个接口来创建新评价或修改评价

  • 访问方法:

    127.0.0.1:8000/timetable/evaluation/student/

    附加put信息格式:

    {
    	"bid": "B2A222222",
    	"text": "ahhhhhhh",
    	"score": 4.0,
    	"student_id": "17373456"
    }
    bid:课程号,student_id:学生学号,score:评价分,text:评价内容。
    
  • 返回值:

    • 201:成功修改或创建
    • 400:参数名称错误/数量错误/评分不为1-5分
    • 401:数据库中没有这个学生
    • 404:数据库中没有这门课程
  • 通过这个接口删除评价

  • 访问方法:

    127.0.0.1:8000/timetable/evaluation/student/

    附加delete信息格式:

    {
    	”bid": "B2A223333",
    	"student_id": "11111111",
    }
    bid:课程号,student_id:学生学号
    
  • 返回值:

    • 204:成功删除
    • 400:参数个数或数量错误
    • 401:数据库中没有这个学生
    • 404:找不到这门课程/评价
  • 通过这个接口给老师点赞

  • 访问方法:

    127.0.0.1:8000/timetable/evaluation/teacher/

    附加post信息格式:

    {
    	"teacher": "张辉",
    	"actor": "17373010",
    	"bid": "B3A233300",
    	"action": "up"
    }
    teacher,被评价的老师名称
    actor,表示点赞/加踩人的学号
    bid,代表课程号,
    action,代表动作,有"up"(点赞),"cancel_up"(取消点赞)
    
  • 返回值:

    • 201:成功
    返回内容
    返回值:201/202
    {
    	"up": 1
    }
    
    • 202:已经点过赞
    • 400:参数数量或名称错误
    • 401:没有这个学生
    • 404:没有这个老师/课程/课程评价
  • 通过这个接口获取校历和该学生未完成ddl信息

  • 通过这个接口获取校历和该学生未完成ddl信息

  • 访问方法

    127.0.0.1:8000/ddl/Calendar/?student_id=17373349&school_year=2019-2020

  • 参数说明

    • student_id:学生学号
    • school_year:哪一学年
  • http返回值

    • 200,成功,返回数据

      {
          "school_year": "2019-2020",
          "first_semester": "2019-09-02",
          "winter_semester": "2020-01-13",
          "second_semester": "2020-02-24",
          "third_semester": "2020-06-29",
          "end_semester": "2020-09-06",
          "holiday": [
              {
                  "year": "2019-2020",
                  "semester": "2019-2020第一学期",
                  "date": "2019-09-13",
                  "holiday": "中秋节"
              },
              {
                  "year": "2019-2020",
                  "semester": "2019-2020第一学期",
                  "date": "2019-09-13",
                  "holiday": "中秋节"
              },
              {
                  "year": "2019-2020",
                  "semester": "2019-2020第一学期",
                  "date": "2019-09-13",
                  "holiday": "中秋节"
              }
          ],
          "ddl": [
              {
                  "course": "计算机科学方法论-2020-张珊",
                  "homework": "第三次作业",
                  "ddl": "2020-03-16 00:00:00"
              },
              {
                  "course": "计算机科学方法论-2020-张珊",
                  "homework": "第一次作业",
                  "ddl": "2020-03-02 12:00:00"
              }
          ]
      }
      
    • 400,参数错误

    • 401,无该学生数据

    • 463,无该学年数据

  • 插入某一学年数据

  • 访问方法

    127.0.0.1:8000/ddl/Calendar/

    {
    	"school_year":"2019-2020",
    	"first_semester":"2019-09-02",
    	"winter_semester":"2020-01-13",
    	"second_semester":"2020-02-24",
    	"third_semester":"2020-06-29",
    	"end_semester":"2020-09-06",
    	"content":[
    		{
    			"semester":"2019-2020第一学期",
    			"date":"2019-09-13",
    			"holiday":"中秋节"
    		},
    		{
    			"semester":"2019-2020第一学期",
    			"date":"2019-09-13",
    			"holiday":"中秋节"
    		},
    		{
    			"semester":"2019-2020第一学期",
    			"date":"2019-09-13",
    			"holiday":"中秋节"
    		}
    		]
    }
    
  • http返回值

    • 200,成功
    • 400,json包格式有问题
  • 用户通过这个接口反馈信息

  • 访问方法

    127.0.0.1:8000/feedback/

    {
    	"student_id":"hxEl4pM4qFUl2/VeRz6QIA==",
    	"kind":"ddl",
    	"content":"ddl有瑕疵"
    }
    
  • http返回值

    • 200,成功
    • 400,json包格式有问题
    • 401,数据库中无该学生数据
  • 管理员通过这个接口获得反馈信息
  • 访问方法
    • 127.0.0.1:8000/feedback/
    • 127.0.0.1:8000/feedback/?date=2020-05-14
    • 127.0.0.1:8000/feedback/?kind=bug
  • 参数说明
    • 无参数:获取所有用户反馈内容
    • date:获取某一天所有反馈内容
    • kind:获取某一类型反馈内容
  • http返回值
    • 200,成功,返回数据
    • 400,参数错误
  • 管理员通过这个接口获得学生每个功能数据最新更新时间
  • 访问方法
    • 127.0.0.1:8000/spider/update/?student_id=17373349
    • 127.0.0.1:8000/spider/update/?calendar=1
    • 127.0.0.1:8000/spider/update/?empty_room=1
  • 参数说明
    • student_id:具体学生学号
    • calendar:校历(值必须为1)
    • empty_room:空教室(值必须为1)
  • http返回值
    • 200,成功,空数据代表从未更新
    • 400,参数错误
    • 401,数据库中无该学生
⚠️ **GitHub.com Fallback** ⚠️