Описание эндпоинтов.
Автоматически сгенерированная страница документации с их перечнем: http://127.0.0.1:8000/docs
- Создать студента
- Получить информацию о студенте по его id
- Обновить информацию о студенте по его id
- Удалить студента по его id
- Получить список всех преподавателей
- Создать новый курс
- Получить информацию о курсе по его id
- Получить список всех студентов на курсе
- Создать новую оценку для студента по курсу
- Обновить оценку студента по курсу
POST /students/
Параметры запроса:
full_name
: str, полное имя студентаdate_of_birth
: str, дата рожденияgroup_id
: int, id группы студента
Пример запроса:
{
"full_name": "Филимонов Пётр Анатольевич",
"date_of_birth": "1999-08-17",
"group_id": 1
}
Параметры ответа:
full_name
: str, полное имя студентаdate_of_birth
: str, дата рожденияid
: int, id студентаgroup
: вложенный json с объектом связанной группыid
: int, id группыname
: str, название группы
Пример ответа:
{
"full_name": "Филимонов Пётр Анатольевич",
"date_of_birth": "1999-08-17",
"id": 12,
"group": {
"id": 1,
"name": "МАТ-01",
"faculty": {
"id": 1,
"name": "Физико-математический"
},
"department": {
"id": 1,
"name": "очная"
}
}
}
GET /students/{student_id}
Параметры запроса:
student_id
: int, id студента
Пример запроса:
GET /students/1
Параметры ответа:
full_name
: str, полное имя студентаdate_of_birth
: str, дата рожденияid
: int, id студентаgroup
: вложенный json с объектом связанной группыid
: int, id группыname
: str, название группы
Пример ответа:
{
"full_name": "Иванов Иван Иванович",
"date_of_birth": "1998-01-01",
"id": 1,
"group": {
"id": 1,
"name": "МАТ-01",
"faculty": {
"id": 1,
"name": "Физико-математический"
},
"department": {
"id": 1,
"name": "очная"
}
}
}
PUT /students/{student_id}
Параметры запроса:
student_id
: int, id студентаfull_name
: str, полное имя студентаdate_of_birth
: str, дата рожденияgroup_id
: int, id группы студента
Пример запроса:
PUT /students/1
{
"full_name": "Иванов Иван Иванович",
"date_of_birth": "1998-01-11",
"group_id": 2
}
Параметры ответа:
full_name
: str, полное имя студентаdate_of_birth
: str, дата рожденияid
: int, id студентаgroup
: вложенный json с объектом связанной группыid
: int, id группыname
: str, название группы
Пример ответа:
{
"full_name": "Иванов Иван Иванович",
"date_of_birth": "1998-01-11",
"id": 1,
"group": {
"id": 2,
"name": "ФИЛ-02",
"faculty": {
"id": 2,
"name": "Филологический"
},
"department": {
"id": 1,
"name": "очная"
}
}
}
DELETE /students/{student_id}
Параметры запроса:
student_id
: int, id студента
Пример запроса:
DELETE /students/12
Пример ответа:
HTTP response status code - 204 No Content
Добавлена пагинация
GET /students/{student_id}
Параметры запроса:
page
: int, номер страницыsize
: int, размер страницы
Пример запроса:
GET /teachers/?page=1&size=50
Параметры ответа:
items
: list, список преподавателейfull_name
: str, полное имя преподавателяdate_of_birth
: str, дата рожденияid
: int, id преподавателяfaculty
: вложенный json с объектом связанного факультетаid
: int, id факультетаname
: str, название факультета
total
: int, всего преподавателейpage
: int, номер страницыsize
: int, размер страницыpages
: int, количество страниц
Пример ответа:
{
"items": [
{
"full_name": "Смирнов Александр Владимирович",
"date_of_birth": "1980-01-01",
"id": 1,
"faculty": {
"id": 2,
"name": "Филологический"
}
},
{
"full_name": "Иванова Марина Сергеевна",
"date_of_birth": "1975-02-02",
"id": 2,
"faculty": {
"id": 1,
"name": "Физико-математический"
}
},
{
"full_name": "Кузнецова Елена Ивановна",
"date_of_birth": "1985-03-03",
"id": 3,
"faculty": {
"id": 3,
"name": "Иностранных языков"
}
},
{
"full_name": "Петров Михаил Викторович",
"date_of_birth": "1990-04-04",
"id": 4,
"faculty": {
"id": 1,
"name": "Физико-математический"
}
},
{
"full_name": "Николаева Ольга Николаевна",
"date_of_birth": "1995-05-05",
"id": 5,
"faculty": {
"id": 2,
"name": "Филологический"
}
}
],
"total": 5,
"page": 1,
"size": 50,
"pages": 1
}
POST /courses
Параметры запроса:
name
: str, название курсаcourse_programs
: list, программа курса (опционально)theme
: str, темаacademic_hours
: int, кол-во академических часов
Пример запроса:
{
"name": "Программирование",
"course_programs": [
{
"theme": "Python",
"academic_hours": 50
},
{
"theme": "Алгоритмы",
"academic_hours": 70
}
]
}
Параметры ответа:
name
: str, название курсаid
: int, id курсаcourse_programs
: list, программа курса (опционально)theme
: str, темаacademic_hours
: int, кол-во академических часовid
: int, id темы
Пример ответа:
{
"name": "Программирование",
"id": 6,
"course_programs": [
{
"theme": "Python",
"academic_hours": 50,
"id": 11
},
{
"theme": "Алгоритмы",
"academic_hours": 70,
"id": 12
}
]
}
GET /courses/{course_id}
Параметры запроса:
course_id
: int, id курса
Пример запроса:
GET /courses/1
Параметры ответа:
name
: str, название курсаid
: int, id курсаcourse_programs
: list, программа курса (опционально)theme
: str, темаacademic_hours
: int, кол-во академических часовid
: int, id темы
Пример ответа:
{
"name": "Математика",
"id": 1,
"course_programs": [
{
"theme": "Алгебра",
"academic_hours": 60,
"id": 1
},
{
"theme": "Геометрия",
"academic_hours": 50,
"id": 2
},
{
"theme": "Теория вероятностей",
"academic_hours": 40,
"id": 3
}
]
}
Добавлена пагинация
GET /courses/{course_id}/students
Параметры запроса:
course_id
: int, id курсаpage
: int, номер страницыsize
: int, размер страницы
Пример запроса:
GET /courses/3/students?page=1&size=50
Параметры ответа:
items
: list, список студентовfull_name
: str, полное имя студентаdate_of_birth
: str, дата рожденияid
: int, id преподавателяgroup
: вложенный json с объектом связанной группыid
: int, id факультетаname
: str, название факультетаfaculty
: вложенный json с объектом связанного факультетаdepartment
: вложенный json с объектом связанного отделения
total
: int, всего студентовpage
: int, номер страницыsize
: int, размер страницыpages
: int, количество страниц
Пример ответа:
{
"items": [
{
"full_name": "Николаев Николай Николаевич",
"date_of_birth": "1996-05-05",
"id": 5,
"group": {
"id": 3,
"name": "АНГ-03",
"faculty": {
"id": 3,
"name": "Иностранных языков"
},
"department": {
"id": 3,
"name": "вечерняя"
}
}
},
{
"full_name": "Петрова Анна Ивановна",
"date_of_birth": "1998-06-06",
"id": 6,
"group": {
"id": 3,
"name": "АНГ-03",
"faculty": {
"id": 3,
"name": "Иностранных языков"
},
"department": {
"id": 3,
"name": "вечерняя"
}
}
},
{
"full_name": "Николаева Ольга Васильевна",
"date_of_birth": "1997-09-09",
"id": 9,
"group": {
"id": 3,
"name": "АНГ-03",
"faculty": {
"id": 3,
"name": "Иностранных языков"
},
"department": {
"id": 3,
"name": "вечерняя"
}
}
}
],
"total": 3,
"page": 1,
"size": 50,
"pages": 1
}
В моей системе - это создание записи об экзамене
POST /grades/
Параметры запроса:
edu_plan_id
: int, id плана обученияexaminer_id
: int, id экзаменатораstudent_id
: int, id студентаgrade_id
: int, id оценкиprotection_date
: str, дата экзамена
Пример запроса:
{
"edu_plan_id": 3,
"examiner_id": 5,
"student_id": 6,
"grade_id": 1,
"protection_date": "2021-12-24"
}
Параметры ответа:
id
: int, id экзаменаedu_plan
: объект связанного плана обученияsemester
: объект семестра- ...
course
: объект курса- ...
group
: объект группы- ...
id
: id плана обучения
examiner
: объект экзаменатораid
: int, id студентаfull_name
: str, полное имяdate_of_birth
: int, дата рождения
student
: объект студентаid
: int, id студентаfull_name
: str, полное имяdate_of_birth
: int, дата рождения
grade
: объект оценкиid
: int, id оценкиdescription
: str, описаниеvalue
: int, значение
protection_date
: str, дата экзамена
Пример ответа:
{
"id": 6,
"edu_plan": {
"id": 3,
"semester": {
"id": 1,
"number": 1,
"year": {
"id": 1,
"start_year": 2021,
"finish_year": 2022
}
},
"course": {
"name": "Английский язык",
"id": 3
},
"group": {
"id": 3,
"name": "АНГ-03",
"faculty": {
"id": 3,
"name": "Иностранных языков"
},
"department": {
"id": 3,
"name": "вечерняя"
}
}
},
"examiner": {
"full_name": "Николаева Ольга Николаевна",
"date_of_birth": "1995-05-05",
"id": 5
},
"student": {
"full_name": "Петрова Анна Ивановна",
"date_of_birth": "1998-06-06",
"id": 6
},
"grade": {
"id": 1,
"description": "Отлично",
"value": 5
},
"protection_date": "2021-12-24"
}
Изменение оценки экзамена
PUT /grades/{grade_id}
Параметры запроса:
grade_id
: int, id экзамена (Это path-параметр! Оставил таким же, как в задании.)grade_id
: int, id оценки (Это параметр в теле запроса! Внешний ключ на справочник оценок)
Пример запроса:
PUT /grades/6
{
"grade_id": 2
}
Параметры ответа:
id
: int, id экзаменаedu_plan
: объект связанного плана обученияsemester
: объект семестра- ...
course
: объект курса- ...
group
: объект группы- ...
id
: id плана обучения
examiner
: объект экзаменатораid
: int, id студентаfull_name
: str, полное имяdate_of_birth
: int, дата рождения
student
: объект студентаid
: int, id студентаfull_name
: str, полное имяdate_of_birth
: int, дата рождения
grade
: объект оценкиid
: int, id оценкиdescription
: str, описаниеvalue
: int, значение
protection_date
: str, дата экзамена
Пример ответа:
{
"id": 6,
"edu_plan": {
"id": 3,
"semester": {
"id": 1,
"number": 1,
"year": {
"id": 1,
"start_year": 2021,
"finish_year": 2022
}
},
"course": {
"name": "Английский язык",
"id": 3
},
"group": {
"id": 3,
"name": "АНГ-03",
"faculty": {
"id": 3,
"name": "Иностранных языков"
},
"department": {
"id": 3,
"name": "вечерняя"
}
}
},
"examiner": {
"full_name": "Николаева Ольга Николаевна",
"date_of_birth": "1995-05-05",
"id": 5
},
"student": {
"full_name": "Петрова Анна Ивановна",
"date_of_birth": "1998-06-06",
"id": 6
},
"grade": {
"id": 2,
"description": "Хорошо",
"value": 4
},
"protection_date": "2021-12-24"
}