«Семь раз отмерь, один раз отрежь» — поговорка, верная для любого проектирования: чем тщательнее сделан проект, тем меньше придётся переделывать в процессе работы. В этой статье расскажем об архитектуре ПО, базовых принципах проектирования программ и о том, как всего один инструмент, REST API, делает программу более стабильной, масштабируемой и облегчает интеграцию с другими сервисами. Покажем на примерах, как это работает и почему в архитектуре большинства цифровых сервисов сегодня применяется модульный (микросервисный) подход.
Модуль или монолит? Подходы в архитектуре цифрового сервиса
Архитектор программного обеспечения в мире цифровых сервисов делает примерно то же самое, что и архитектор зданий, кварталов и районов в городе. Простыми словами, он создает план для будущей программы. Вот что может в него входить:
-
план и структура цифрового сервиса (верхнеуровневый);
-
решения о том, как проект будет устроена «изнутри»: как будут взаимодействовать части; какие технологии будут применяться;
-
набор правил и принципов, которые определяют разработку.
Если обобщить, то разработка архитектуры ПО — это наука проектировать программное обеспечение так, чтобы оно отвечало всем нужным требованиям, а его доработка, развертывание и масштабирование не вызывали лишних сложностей. Чтобы добиться этого, проект нужно тщательно продумать ещё до того, как написаны первые строчки кода. Архитектуру ПО строят на основе анализа бизнес-требований и функционально-технических требований проекта, а также изучения бизнес-процессов заказчика. Чем больше внимания уделено этому этапу, тем меньше лишней работы достанется разработчикам.
В этой статье мы разберём особенности архитектуры цифровых сервисов на примере клиент-серверных систем, то есть таких, где задачи распределяются между двумя основными компонентами: клиентами (например, веб-браузером или приложением для смартфона) и серверами (удалёнными устройствами обработки данных). У приложений, которые устанавливаются на устройство клиента и производят всю работу на нём, не отправляя запросы на другие серверы, принципы построения будут другими. Но все методы бессерверной архитектуры мы рассмотрим в следующих статьях.
Какой бывает архитектура цифровых сервисов? Сейчас популярнее всего деление на два метода: монолитную и микросервисную.
Монолит — это иерархическая архитектура, причем каждый слой приложения отвечает за свою часть функционала: работа с базой, логирование, интерфейс. Как это работает, можно увидеть на примере популярного шаблона Model-View-Controller («Модель-Вид-Контроллер»). Здесь данные приложения и управляющая логика делятся на три отдельных компонента: модель, представление и контроллер.
-
Модель — это хранилище данных, которое также реализует логику изменения своего состояния в ответ на запросы контроллера.
-
Представление отвечает за визуализацию данных модели для пользователя, автоматически обновляясь при любых изменениях в модели.
-
Контроллер выступает посредником между пользователем и моделью, интерпретируя действия пользователя и передавая модели команды на изменение.
Каждый компонент можно изменять независимо от других.
Микросервисная архитектура построена на принципе симметрии. Простыми словами, каждый сервис — это самостоятельный компонент, отвечающий за отдельную бизнес-функцию и имеющий собственное хранилище данных. Такая структура обеспечивает независимость, масштабируемость и удобство модульного тестирования.
Если вы планируете запустить новый онлайн-сервис, начните с архитектуры вместе с экспертами Uplab. Мы разберем ваши бизнес-процессы и устройство системы, предложим, как разделить ее на модули, и опишем API для связи модулей между собой и с внешними сервисами. Напишите нам через форму «Обсудить проект».
API — «чёрный ящик» разработчиков
Пользователи обычно не знают, как программы устроены внутри. Но им это и неважно: люди используют многие достижения прогресса, не задумываясь, что «под капотом». Программисты, используя готовые компоненты программ в своей работе, часто тоже не вдаются в детали, для них это лишь абстракции.
API — это готовые абстрактные функции (а именно программные интерфейсы приложений), которые разработчики применяют в своих проектах. Простыми словами, API определяют способы взаимодействия различных программных приложений. Они устанавливают правила обмена данными, обеспечивая слаженную работу как внутри одного приложения, так и между разными системами.
-
API позволяют при программировании эффективно использовать готовый код, избегая разработки с нуля. Это экономит время и ресурсы.
-
API стандартизируют обмен данными, обеспечивая бесшовную интеграцию между различными платформами и языками программирования.
-
API помогают масштабировать приложения, оптимизируя производительность и распределение ресурсов при различных нагрузках.
-
API способствуют модульной архитектуре, разделяя функциональность на независимые компоненты. Это улучшает стабильность и упрощает поддержку.
Мы уже рассказывали подробно об API в одной из предыдущих статей блога и упоминали, что их существует несколько видов. Непосредственно с архитектурой ПО связан REST API (Representational State Transfer).
Как работает REST API
REST API — это «свод правил», который определяет ограничения для программных интерфейсов. Точнее, набор определенных ограничений и принципов проектирования, позволяющий добиться определённых свойств системы: описать, как именно они должны быть устроены и какие функции поддерживать. Также его определяют как «архитектурный стиль взаимодействия компонентов распределённого приложения в сети».
REST API позволяет стандартизировать работу программных интерфейсов, сделать их более удобными, эффективными и простыми в масштабировании.
Representational State Transfer (расшифровка аббревиатуры) чаще всего переводится как «передача состояния представления», но более точно будет перевести это как «передача „самоописываемого“ состояния».
Иногда, помимо русифицированного термина «рест» и акронима REST, можно встретить слово RESTful.
Важно не путать REST API с протоколами передачи данных. Протоколы — это базовые правила для обмена информацией между системами, определяющие формат и способ передачи данных на низком уровне (например, HTTP, TCP/IP, SMTP).
REST API — это не протокол, а структурный подход к созданию веб-сервисов. Он использует существующие протоколы, такие как HTTP, но устанавливает более высокий уровень организации взаимодействия между клиентом и сервером. РЕСТ АПИ определяет принципы построения запросов и ответов, использования HTTP-методов (GET, POST и т.д.) и представления данных (например, JSON, XML).
Роль REST API в микросервисной структуре
Итак, РЕСТ АПИ позволяет клиентам (например, веб-приложениям или мобильным приложениям) получать доступ к ресурсам сервера и взаимодействовать с ними через стандартные HTTP-методы (GET, POST, PUT, DELETE) и унифицированный интерфейс, обычно представленный в формате JSON или XML. REST API обеспечивает стандартизированный, гибкий и масштабируемый механизм для взаимодействия этих блоков как внутри программы, так и с внешним миром.
Разделение для удобства и безопасности
Главный принцип применения REST API в микросервисной архитектуре: «Разделение на модули = Границы ответственности = Логические API».
Каждый модуль, или микросервис, отвечает за определенную область функциональности: например, модуль управления пользователями, модуль обработки заказов, модуль платежей. Эти границы ответственности модулей естественным образом становятся границами для разработки REST API. Каждый модуль может предоставлять свой собственный REST API, который описывает его функциональность для других модулей и внешних клиентов.
Важные качества, вытекающее из этого принципа — изоляция и инкапсуляция. REST API, будучи стандартизированным интерфейсом, обеспечивает изоляцию. Модули взаимодействуют через сеть, используя HTTP запросы и ответы, а не через прямые вызовы функций или общие библиотеки. Это уменьшает зависимости между модулями и позволяет командам разработчиков работать над разными модулями изолировано, без риска «сломать» весь сервис.
Именно так мы построили работу над сайтом «Фасадные решения». Фронтенд написали на Vue.js, серверную часть на Node.js, а связали их через REST API. Благодаря такому разделению фронтенд и бэкенд разрабатывали параллельно: каждая пара разработчиков отвечала за свою часть, и команды не ждали друг друга.
Комментарии к статье
Комментарии: 0