Похожие презентации:
API
1. Разработка API Личного кабинета
2. БД:
СВЯЗЬ ОТ ЮЗЕРА КСОТРУДНИКУ!!!!!
3. БД:
4. ШАГ 1: Создание проекта
5. ШАГ 1: Создание проекта
6. ШАГ 1: Создание проекта
7. ШАГ 1: Создание проекта
8. ШАГ 2: Установка пакетов
• Microsoft.EntityFrameworkCore.SqlServer: Основной пакетдля работы с SQL Server через Entity Framework Core
(ORM).
• Microsoft.EntityFrameworkCore.Tools: Инструменты для
работы с миграциями и генерации кода (например, на
основе существующей БД).
• Microsoft.EntityFrameworkCore.Design: Необходим для
некоторых команд инструментов EF Core, особенно для
scaffold (генерации моделей на основе БД).
9. ШАГ 3: Настройка строки подключения
• appsettings.json: Это стандартный файл для конфигурации приложения. Он отлично подходитдля хранения строки подключения в разработке.
• Замените your_server_name, your_database_name, your_username, your_password на ваши
реальные данные
• Server= your_server_name;Database=your_database_name;Trusted_Connection=True;
TrustServerCertificate=True;
(Если у вас windows authentication)
• Server=your_server_name;Database=your_database_name;User
Id=your_username;Password=your_password;TrustServerCertificate=True;
(Если у вас sql authentication)
10. ШАГ 4: Использование команды Scaffold-DbContext для генерации моделей и контекста
ШАГ 4: Использование команды ScaffoldDbContext для генерации моделей и контекстаПараметры команды:
• Scaffold-DbContext – Объявление команды
• "Server=your_server_name;Database=your_database_name;User
Id=your_username;Password=your_password;Trusted_Connection=True;TrustServerCertificate=True; — ваша
строка подключения к базе данных.
• Microsoft.EntityFrameworkCore.SqlServer — провайдер для SQL Server.
• -OutputDir Models — папка, в которую будут помещены сгенерированные классы сущностей. Вы
можете изменить имя папки на любое другое по вашему желанию.
• -ContextDir Data — папка, в которую будет помещен сгенерированный контекст БД. Вы можете
изменить имя папки на любое другое по вашему желанию.
• -Context AppDbContext — имя класса контекста, который будет создан.
• -Force - перезаписывает существующие файлы, если они уже существуют.
11. ШАГ 5: Добавление контекста в Program.cs
Предварительно удалите строку подключения из контекста12. ШАГ 6: Добавление поля Name в модели сотрудника и создание класса UserLoginDto и CommentDto
DTO (Data Transfer Object) простымисловами можно определить как объект,
который используется для передачи
данных между подсистемами
приложения.
Он содержит только поля и методы для
доступа к ним, не содержит бизнес-логики
и используется только для передачи
данных.
13. ШАГ 7: Установка пакета Microsoft.AspNetCore.Authentication.JwtBearer
Пакет Microsoft.AspNetCore.Authentication.JwtBearer предназначен для реализации аутентификации сиспользованием JWT (JSON Web Tokens) в приложениях ASP.NET Core. Он позволяет вашему приложению
принимать и обрабатывать JWT в качестве механизма аутентификации.
Пакет System.IdentityModel.Tokens.Jwt предоставляет поддержку для создания,
сериализации и валидации JSON Web Tokens (JWT).
14. ШАГ 8: Создание настроек токена в appsettings.json
• Key в JWT (JSON Web Token) — это ключ, который будет применяться для создания токена• Рекомендуется использовать как минимум 256 бит (32 байта) для HMAC, что соответствует длине
ключа 32 символа, если использовать Base64 кодировку (что дает чуть больше 44 символов).
15. ШАГ 9: Настройка JWT в Program.cs
16. ШАГ 10: Создание контроллера в папке Controllers
17. ШАГ 11: Пишем контроллер SignIn
• Указываем путь• Получаем контекст и
конфигурацию
18. ШАГ 11: Пишем контроллер SignIn
Логика метода SignIn для аутентификации пользователя1.Получение данных о пользователе:
•В первой строке используется метод FirstOrDefault, чтобы найти пользователя по
имени и паролю, переданным в теле запроса (userLogin.Name и userLogin.Password).
•Для этого выполняется соединение с таблицей Employee, которая связана с
таблицей User через навигационное свойство Employee. Это позволяет получить
информацию о сотруднике пользователя.
•В запросе происходит конкатенация FirstName и SecondName сотрудника, чтобы
проверить, совпадает ли имя пользователя.
2.Проверка на наличие пользователя:
•Если пользователь не найден (user == null), возвращается ответ с кодом 401
(Unauthorized) и сообщением "Неверные данные для авторизации". Это
предотвращает дальнейшие действия, если данные пользователя неверные.
3.Создание JWT токена:
•Если пользователь найден, создаются клеймы (claims) для токена. Клеймы — это
данные, которые будут сохранены в токене:
•ClaimTypes.Name: полное имя сотрудника (FirstName + SecondName).
•ClaimTypes.NameIdentifier: уникальный идентификатор пользователя
(user.Id).
•Токен будет подписан с использованием секретного ключа из конфигурации
(_configuration["Jwt:SecretKey"]), что гарантирует его подлинность.
•Устанавливается срок действия токена — 1 день (expires:
DateTime.Now.AddDays(1)).
4.Возврат токена:
•После создания токена используется JwtSecurityTokenHandler для его сериализации
в строку.
•Возвращается объект с полем token, содержащим JWT токен, который может быть
использован для аутентификации в дальнейших запросах.
19. ШАГ 12: Пишем контроллер Documents
• Устанавливаем путь• Делаем доступ к методу только с помощью
токена
• Получаем контекст
20. ШАГ 12: Пишем контроллер Documents
Логика метода GetDocuments для получения списка документов
Запрос к базе данных:
В методе используется async и await для выполнения асинхронного запроса к базе данных, чтобы не
блокировать выполнение других операций в приложении.
В запросе вызывается метод _context.Documents, который обращается к таблице Documents в базе данных
через Entity Framework.
Выбор необходимых полей:
Метод Select используется для проекции (выбора) только тех полей, которые нам нужны:
Id: Идентификатор документа.
Title: Название документа.
DateCreated: Дата создания документа.
DateUpdated: Дата последнего обновления документа.
Category: Категория документа.
HasComments: Булево значение, показывающее, есть ли у документа комментарии.
Эти поля выбираются, чтобы в ответе вернуть только минимально необходимую информацию о документах.
Получение данных из базы данных:
Метод ToListAsync выполняет асинхронное извлечение данных из базы данных и преобразует результаты в
список объектов.
Возврат ответа:
После того как данные получены, они возвращаются в виде JSON-ответа с кодом 200 (OK) через return
Ok(documents).
Это означает, что клиент получит список документов в формате JSON, содержащий только выбранные поля
(идентификатор, название, даты и т. д.).
21. ШАГ 12: Пишем контроллер Documents
HttpGet("{documentId}/Comments")]: Атрибут маршрутизации указывает, что это
метод для обработки GET запроса по пути
/api/v1/Document/{documentId}/Comments, где {documentId} — это параметр,
который будет передан в метод.
public IActionResult GetComments(int documentId): Метод возвращает
IActionResult, что позволяет вернуть разные типы ответов. Параметр documentId
передается из URL запроса.
var comments = _context.Comments: Это запрос к базе данных, который
использует контекст _context для доступа к таблице Comments.
.Where(c => c.DocumentId == documentId): Фильтрация комментариев по
DocumentId. Мы выбираем только те комментарии, которые относятся к
конкретному документу, чей ID передан в параметре documentId.
.Select(c => new {...}): Формирование нового анонимного объекта, включающие
поля ниже
.ToList(): Выполняет запрос к базе данных и возвращает список комментариев.
if (comments == null): Проверка, есть ли комментарии. В случае с LINQ и EF Core
этот блок вряд ли будет срабатывать, так как ToList() вернет пустой список, а не
null. Но если бы был использован другой метод, например, FirstOrDefault(), то
проверка на null была бы актуальна.
return NotFound(new { message = "Нет комментариев для этого документа" });:
Если комментарии не найдены, возвращаем HTTP статус
22. ШАГ 12: Пишем контроллер Documents
Проверка данных комментария:
Проверяется, что текст комментария не пустой. Если пустой, возвращается
ошибка 400 (Bad Request).
Проверка существования документа:
Ищем документ по documentId в базе. Если документ не найден, возвращается
ошибка 404 (Not Found).
Извлечение идентификатора пользователя (из токена JWT):
Получаем userId из токена, который был передан в запросе (через
ClaimTypes.NameIdentifier). Если токен не найден, возвращается ошибка 401
(Unauthorized).
Создание комментария:
Создается новый объект Comment, где:
Устанавливаются поля: DocumentId, Text, DateCreated, DateUpdated и AuthorId.
AuthorId извлекается из токена.
Устанавливается флаг HasComments на true у документа.
Добавление комментария и сохранение изменений:
Новый комментарий добавляется в базу данных, и изменения сохраняются.
Возвращение успешного ответа:
Возвращается сообщение о том, что комментарий был успешно добавлен.