- Необходимо создать ASP.NET Core Web API проект, который будет обеспечивать возможность взаимодействия с базой данных MS SQL Server.
- Реализовать сущности (модели) для работы с информацией о семестрах, неделях, предметах, типах аудиторий, кабинетах, преподавателях, группах, парах и расписаниях в соответствии с бизнес-логикой приложения.
- Реализовать контроллеры для каждой сущности с методами, позволяющими выполнять CRUD операции (GET - чтение, POST - добавление, PUT - изменение, DELETE - удаление).
- Добавить логику проверки перед удалением записи из базы данных, чтобы предотвратить удаление записи, если она уже используется в других таблицах (связь по внешнему ключу).
- Реализовать возможность обработки и возврата ошибок в формате JSON для обеспечения хорошего опыта пользователя.
- Протестировать всю функциональность API.
Структура БД (MS SQL):
-
Таблица
Subjects
:- ID,
- SubjectName,
- LectureHours,
- PracticHours,
- TotalHours,
- ConsultationHours,
- TypeOfCertification.
-
Таблица
Teachers
:- ID,
- Name,
- Surname,
- Patronymic.
-
Таблица
Groups
:- ID,
- GroupNumber, //код группы
- ShortNumber, //короткое наименование группы
- StudentNumber.
-
Таблица
AudienceTypes
:- ID,
- TypeName,
- Description.
-
Таблица
Audiences
:- ID,
- AudienceTypeID,
- SeatsNumber, //количество мест
- StudentNumber, //количество студентов
- AudienceNumber.
-
Таблица
Semesters
:- ID,
- Year,
- IsEven. //имеется ввиду 1 или 2 семестр
-
Таблица
Weeks
:- ID,
- SemesterID,
- WeekNumber.
-
Таблица
Users
:- UserID,
- UserName,
- Password,
- Email.
-
Таблица
Pairs
:- PairID,
- AudienceID,
- GroupID,
- SubjectID,
- TeacherID.
-
Таблица
Days
:- ID,
- DayOfWeek,
- WeekID,
- FirstPairID, //ID 1 пары
- SecondPairID, //ID 2 пары
- ThirdPairID, //ID 3 пары
- FourthPairID, //ID 4 пары
- FifthPairID, //ID 5 пары
- SixthPairID, //ID 6 пары
- SeventhPairID. //ID 7 пары
Данный веб-сервис разработан на ASP.NET Core Web API и обеспечивает взаимодействие с базой данных MS SQL Server для выполнения CRUD операций с использованием HTTP запросов. API предназначен для хранения данных, необходимых для составления расписания.
- GET: Получение данных (например, список всех записей или конкретной записи по идентификатору).
- POST: Создание новой записи.
- PUT: Обновление существующей записи.
- DELETE: Удаление записи по идентификатору.
Особенности API - При попытке удаления элемента API проверяет, связан ли данный элемент с другими таблицами. Если элемент уже используется в другой таблице, API возвращает ошибку и не позволяет удалить запись, чтобы избежать нарушения целостности данных.
Таким образом, этот RESTful API обеспечивает безопасное взаимодействие с данными, предотвращая нецелевые действия при попытке удаления элементов, которые имеют зависимости в других таблицах.
Методы HTTP данного API
Семестры:
- GET: /api/Semesters | /api/Semesters/{id}
- POST: /api/Semesters
- PUT: /api/Semesters/{id}
- DELETE: /api/Semesters/{id}
Недели:
- GET: /api/Weeks | /api/Weeks/{id}
- POST: /api/Weeks
- PUT: /api/Weeks/{id}
- DELETE: /api/Weeks/{id}
Пользователи:
- GET: /api/Users | /api/Users/{id}
- POST: /api/Users
- PUT: /api/Users/{id}
- DELETE: /api/Users/{id}
Преподаватели:
- GET: /api/Teachers | /api/Teachers/{id}
- POST: /api/Teachers
- PUT: /api/Teachers/{id}
- DELETE: /api/Teachers/{id}
Предметы:
- GET: /api/Subjects | /api/Subjects/{id}
- POST: /api/Subjects
- PUT: /api/Subjects/{id}
- DELETE: /api/Subjects/{id}
Группы:
- GET: /api/Groups | /api/Groups/{id}
- POST: /api/Groups
- PUT: /api/Groups/{id}
- DELETE: /api/Groups/{id}
Типы аудиторий:
- GET: /api/AudienceTypes | /api/AudienceTypes/{id}
- POST: /api/AudienceTypes
- PUT: /api/AudienceTypes/{id}
- DELETE: /api/AudienceTypes/{id}
Аудитории:
- GET: /api/Audiences | /api/Audiences/{id}
- POST: /api/Audiences
- PUT: /api/Audiences/{id}
- DELETE: /api/Audiences/{id}
Пары:
- GET: /api/Pairs | /api/Pairs/{id}
- POST: /api/Pairs
- PUT: /api/Pairs/{id}
- DELETE: /api/Pairs/{id}
Расписания:
- GET: /api/Days | /api/Days/{id}
- POST: /api/Days
- PUT: /api/Days/{id}
- DELETE: /api/Days/{id}
Формат данных - JSON
Коды состояния HTTP этого веб-сервиса:
- 200 OK - запрос успешно выполнен.
- 204 No Content - для этого запроса нет содержимого для отправки.
- 400 Bad Request - возникает, когда вы пытаетесь изменить данные с использованием идентификатора, которого нет в базе данных, или когда запись, которую вы пытаетесь удалить, уже связана с другой таблицей.
- 404 Not Found - означает, что запрошенный идентификатор для удаления не найден в базе данных или данные вообще отсутствуют.
Тесты
- Отправить POST запрос для создания новой записи.
- Проверить статус код ответа. //200
- Проверить наличие созданной записи в базе данных.
- Отправить GET запрос для получения списка записей.
- Проверить статус код ответа. //200
- Проверить формат и содержание возвращаемых данных.
- Отправить GET запрос для получения конкретной записи.
- Проверить статус код ответа для запроса конкретной записи. //200
- Проверить содержание возвращаемых данных для конкретной записи.
- Отправить PUT запрос для обновления существующей записи.
- Проверить статус код ответа. //204
- Проверить обновленную запись в базе данных.
- Попытаться удалить запись, не используемую в другой таблице.
- Проверить статус код ответа для удаления записи без зависимостей. //200
- Убедиться, что запись удалена.
- Попытаться удалить запись, используемую в другой таблице.
- Проверить статус код ответа для удаления записи с зависимостями. //400 this record is used as a foreign key in other entities
- Убедиться, что запись осталась нетронутой в базе данных.
- Проверить обработку ошибок при отправке неверного запроса.
- Проверить обработку ошибок при попытке доступа к несуществующей записи. //404
- Проверить обработку ошибок при попытке выполнить действие, нарушающее правила таблиц в базе данных. //400 this record is used as a foreign key in other entities
- AutoMapper: для упрощения процесса маппинга между сущностями базы данных и DTO объектами.
- Microsoft.EntityFrameworkCore: для работы с базой данных.
- Microsoft.EntityFrameworkCore.SqlServer: предоставляет поддержку для работы с MS SQL Server.
- Microsoft.EntityFrameworkCore.Tools: для использования инструментов Entity Framework Core, таких как миграции и т.д.
API for Mobile может выполнять только GET запросы для передачи данных мобильному клиенту и при этом имеет схожую структуру. Данный веб-сервис используется в следующих приложениях Windows scheduling app, Android schedule app