УДК 004
Езжев Никита Андреевич Ezzhev Nikita Andreevich
студент, Ярославский государственный университет им. П. Г. Демидова, Россия, г.
Ярославль
student, P. G. Demidov Yaroslavl State University Russia, Yaroslavl
РАЗРАБОТКА КОРПОРАТИВНОГО НОВОСТНОГО WEB-СЕРВИСА С ИСПОЛЬЗОВАНИЕМ .NET CORE И ANGULAR
DEVELOPMENT OF A CORPORATE NEWS WEB SERVICE USING .NET
CORE AND ANGULAR
Аннотация. в данной статье описывается процесс создание сервиса показа новостей с использованием веб-сервера на основе .Net Core и микросервисной архитектурой, клиентского приложения на основе Angular и базы данных SQLite для использования в качестве корпоративного новостного портала.
Abstract: this article describes the process of creating a news service using a web server based on .Net Core, an Angular based client application and SQLite database for use as an enterprise news service.
Ключевые слова: .NET Core, C#, REST API, Angular, TypeScript, Микро-сервисы.
Key words: .NET Core, C#, REST API, Angular, TypeScript, Microservices.
Целью создания приложения является создание новостного портала внутри организации, который бы позволил агрегировать новости, тем или иным образом связанные с компанией. Должна иметься возможность в автоматическом режиме собирать новости из различных социальных сетей из групп компании. Так же должна быть возможность предложения новостей работниками компании и соответственно модерации новостей данных предложений.
Приложение было построено на клиент-серверной архитектуре. Серверная часть приложения написана с использованием фреймворка .Net Core и языка программирования C#.
.NetCore это модульная платформа для разработки программного обеспечения, с открытым исходным кодом. Совместима с такими операционными системами как Windows, Linux и macOS. Была выпущена компанией Microsoft. Поддерживает такие языки программирования как С#, Visual Basic .NET и F#. С# относится к семье языков с C-подобным синтаксисом по синтаксису наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов, делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения. Переняв многое от своих предшественников — языков C++, Pascal, Модула, Smalltalk и Java — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем. Основным критерием, из-за которого выбор пал именно на
это язык стала его достаточно высокая гибкость, удобство разработки, а также достаточно высокая производительность.
Построение приложения так же включает в себя процесс разработки БД и логики для взаимодействия с ними. Для работы с базами данных использовался Entity Framework Core. Entity Framework (EF) Core — это кроссплатформенная и расширяемая версия технологии доступа к данным Entity Framework с открытым исходным кодом. EF Core может использоваться как объектно-реляционный модуль сопоставления (O/RM), позволяя разработчикам .NET работать с базой данных с помощью объектов .NET. Использование моделей написанных на C# позволяет в значительной мере упростить процесс создания приложения. Использование объектно-ориентированных фреймворков для доступа к базам данных несёт в себе ещё один плюс это гораздо более простая поддержка продукта, после выпуска, так как для того чтобы поддерживать код работы с базой данных разработчику необходимо понимать язык на котором написано приложение, так как нет необходимости вникать в тонкости sql запросов, эта функция возлагается на фреймворк, который способен строить запросы в оптимальной форме в автоматическом режиме. EF Core поддерживает множество систем баз данных. Также стоит отметить, что EF Core предоставляет универсальный API для работы с данными. Если будет необходимость сменить целевую СУБД, то основные изменения в проекте будут касаться прежде всего конфигурации и настройки подключения к соответствующим провайдерам баз данных. Код, который непосредственно работает с данными, останется прежним. Эта особенность позволяет использовать различные типы БД для разных сред. Так, например можно использовать, легковесную БД SqLite в тестовой среде, так как её крайне легко поднять и её будет достаточно для тестирования и разработки, а в среде, где приложение уже непосредственно запущено будет использоваться, например база данных MSSql, позволяющая более гибко масштабировать продукт, но при этом может требовать больше ресурсов.
В качестве базы данных в приложении используется СУБД SQLite. На данный момент это одна из самых компактных встраиваемых, реляционных СУБД. SQLite позволяет хранить все данные в одном файле и благодаря своему небольшому объему, отличается быстродействием. Для целей поставляенных перед приложением возможностей этой СУБД вполне достаточно, так как не предполагается масштабирование приложения. SQLite архитектурно значительно отличается от таких СУБД, как например MySQL и PostgreSQL. Этот тип БД выполнен в виде отдельной библиотеки, которая содержит в себе провайдер запросов и интерфейсы для взаимодействия с ней. Данная архитектура делает эту базу данных крайне быстрой относительно популярных решений, основанных на клиент-серверной архитектуре, где взаимодействие с БД происходит через сетевые протоколы, что накладывает дополнительные накладные расходы. В качестве достоинства, из-за которого был выбран данный тип базы данных - легкость в разворачивании приложения, использующего этот тип базы данных и возможность работы с СУБД на серверах с невысокими показателями производительности.
Для реализации клиентской части сервиса был выбран фреймворк Angular. Данный фреймворк представляет собой открытую и свободную платформу для разработки веб-приложений, написанную на языке TypeScript. Фреймворк разработан командой из компании Google, а также сообществом разработчиков из других компаний. В качестве языка разработки на клиентской части применяется язык TypeScript. TypeScript разработан компанией Microsoft и представляет собой подмножество языка JavaScript. TypeScript обладает обратной совместимостью с JavaScript и после компиляции код написанный на TS становиться JS кодом. Среди преимуществ этого языка, которые повлияли на выбор его для написания проекта можно назвать строгую типизацию, что позволило сделать код более понятным, легко читаемым и упростить процесс поддержки и расширения приложения.
Серверная часть приложения основана на микро-сервисной архитектуре. Это означает, что сервер поделён на небольшие приложения, каждое из которых выполняет определенную функцию. На данный момент веб сервер состоит из 4 микро-сервисов - Rest API сервис, авторизационный сервис и два сервиса генерации новостей. Один из низ использует в качестве источника новостей социальную сеть ВКонтакте, а второй использует внутреннюю базу знаний компании для создания новостей.
Микро-сервисная архитектура на сегодняшний день является достаточно популярным решением для создания сложных приложений. Среди основных её плюсов можно выделить простату масштабирования, более лёгкую поддержку, так каждый функциональный компонент выделен в отдельный сервис, более простое расширение приложения, так при добавлении новых сервисов, вероятность вывода из строя всего приложения гораздо снижается. Разбиение создаваемого приложения на микро-сервисы дало возможность максимально упростить логику каждого сервиса, что положительно сказалось на их отказоустойчивости, так как проблемы одного из компонентов никаким образом не влияют на работоспособность остальной части приложения. Возможность расширения для разрабатываемого приложения достаточно важна, так как должна быть возможность добавление новых сервисов для автоматической генерации новостей на основе внешних источников, отличных от тех, которые были добавлены на начальном этапе разработки. Общий вариант текущей схемы портала представлен на Рис. 1. На момент написания статьи приложение содержит в себе 5 микро-сервисов - сервис авторизации, отвечающий за авторизацию и аутентификацию пользователей, два сервиса для генерации новостей, API сервис и сервис клиентской части приложения.
Рис. 1 Диаграмма взаимодействия компонентов портала
Все компоненты серверной части приложения взаимодействуют с базой данных портала. База данных используется для хранения всей информации приложения - это и данные для работы функций сервиса авторизации, и различные типы новостей, сгенерированных как автоматическом режиме описанными выше сервисами, так и в ручном режиме - пользователями через веб интерфейс.
Портал предоставляет ролевую модель доступа к функционалу. Различный функционал для трёх групп пользователей - неавторизованные клиенты могут лишь просматривать новости. Пользователи, которые прошли авторизацию получают дополнительно возможность предлагать свои новости. Последняя роль - модератор, данный тип пользователей так же получает возможность проверять предложенные новости и разрешать их показ на портале. Процесс авторизации построен на основе технологии OpenId Connect. Данная технология - это третье поколение открытого стандарта аутентификации. OpenID Connect позволяет интернет-ресурсам проверить личность пользователя на основе аутентификации, выполненной авторизационным сервером. Для работы с сервисом используется RESTful API, структура которого описана в спецификация данного стандарта. Также в OpenID Connect определены дополнительные механизмы для надёжного шифрования и цифровой подписи. Стандарт позволяет использовать дополнительные возможности, такие как управление сессиями и обнаружение OpenID-провайдеров. Для предоставления функций аутентификации используются встроенные средства для работы с ролевым доступом к ресурсам платформы .Net Core.
Клиентская часть приложения состоит из двух основных частей -компонента для просмотра новостей и компонента для создания и редактирования новостей. Общий вид компоненты для показа новостей можно увидеть на Рис. 2. Данная страница имеет возможность показа двух типов новостей - важные новости отображаются на правой стороне и имеют особую пометку. Иные новости отображаются слева. В колонке слева расположен список всех актуальных новостей, доступных для показа на портале.
Admin panel Add news 2019-06-13 D
This month birthdays celebrate
Максим Лебедев 2 June Денис Головко 10 June Антон Кокорев 11 June Дмитрий Корж 14 June Дмитрий Галиев 16 June Евгений Кокуйкин 18 June Тхань Чан 26 June
Akvelon
Как бубен помогает в разработке?
Рис. 2 Страница показа новостей.
На Рис. 3 представлен общий вид страницы создания и редактирования новостей. Эта страница предоставляет возможность создания и редактирования новостей, для этого на ней присутствует полноценный текстовый редактор.
Рис. 3 Страница создания и редактирования новостей
Так же есть возможность добавлять новости, использую ссылки на новости из социальной сети ВКонтакте через специальное поле на странице. Формирование новости при этом будет происходит на сервере при помощи одного из сервисов, который выкачает материал по указанной ссылке через открытое API ВКонтакте и приведет материал новости к формату, используемому на портале.
Портал имеет возможность получения и создания новостей в автоматическом режиме без участия пользователей. Для этого был реализован сервис, основной задачей которого является возможность периодического запуска парсеров для различных источников новостей. Этот сервис основан на встроенных в .Net Core размещенных службах. Размещенная служба — это специальный класс, содержащий логику для фоновой задачи, реализующий интерфейс IHostedService. Периодический запуск гибко настраивается, позволяя настраивать время и периодичность запуска для каждого сервиса в отдельности.
Текущая версия приложения включает два сервиса для сервиса выполняющих функции генерации новостей. Один сервис получает материал для формирования новостей из социальной сети ВКонтакте. Для работы с социальной сетью ВКонтакте используется публичное API. К плюсам использования API можно отнести то, что мы получаем чистые данные в качестве ответа сервера, в формате удобном для дальнейшей программной обработки. Другой сервис получает новости из внутренний базы знаний компании. Данный источник не содержит открытого API, поэтому для получения информации с портала был использован метод синтаксического анализа html страниц. Основной частью обоих сервисов является компонент Parser, который формирует из полученных данных новости в том формате, который принят на портале. В дальнейшем предполагается расширение списка доступных источников новостей.
Разработанное приложение, в полной мере отвечает поставленным перед ним требованиям и на данный момент оно успешно эксплуатируется в компании. Гибкая архитектура дала возможности для расширения функционала приложения.
Библиографический список:
1. Roy Thomas, Fielding Architectural Styles and the Design of Network-based Software Architectures. [Электронный ресурс]: https://www.ics.uci.edu/ ~fielding/pubs/dissertation/top.htm (дата обращения 08.12.2020).
2. Martin Fowler, Patterns of Enterprise Application Architecture, 2011. - 533 c.
© Н.А. Езжев, 2020