Статья опубликована в рамках: Научного журнала «Студенческий» № 16(354)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал
РАЗРАБОТКА СЕРВЕРНОЙ ЧАСТИ ВЕБ-СЕРВИСА БРОНИРОВАНИЯ ПОМЕЩЕНИЙ С ИСПОЛЬЗОВАНИЕМ GO, POSTGRESQL И DOCKER
DEVELOPMENT OF THE SERVER SIDE OF A ROOM BOOKING WEB SERVICE USING GO, POSTGRESQL AND DOCKER
Perminova Ekaterina Maksimovna
Student, Department of Applied Information Technologies, Yuri Gagarin State Technical University of Saratov,
Russia, Saratov
АННОТАЦИЯ
В статье рассматривается разработка серверной части веб-сервиса бронирования помещений. Описываются основные функциональные требования к системе, структура серверного приложения, подход к организации REST API, работа с базой данных PostgreSQL, а также использование контейнеризации с помощью Docker. Особое внимание уделяется вопросам разделения ответственности между слоями приложения, обработке пользовательских ролей, обеспечению корректности бронирования и созданию тестового окружения. Рассмотренный подход может быть применен при разработке учебных и прикладных информационных систем, связанных с управлением расписанием и резервированием ресурсов.
ABSTRACT
The article considers the development of the server side of a room booking web service. It describes the main functional requirements for the system, the structure of the server application, the approach to organizing a REST API, interaction with a PostgreSQL database, and the use of containerization with Docker. Special attention is paid to the separation of responsibilities between application layers, the processing of user roles, ensuring the correctness of booking operations, and creating a test environment. The proposed approach can be applied in the development of educational and applied information systems related to schedule management and resource reservation.
Ключевые слова: веб-сервис, Go, REST API, PostgreSQL, Docker, бронирование, серверная разработка, информационная система.
Keywords: web service, Go, REST API, PostgreSQL, Docker, booking, server-side development, information system.
Введение
В современных организациях часто возникает необходимость автоматизировать процесс бронирования помещений, переговорных комнат, учебных аудиторий или иных ресурсов. При отсутствии специализированной информационной системы подобные процессы могут выполняться вручную, что приводит к пересечению заявок, ошибкам в расписании, потере информации и увеличению нагрузки на сотрудников.
Одним из способов решения данной проблемы является создание веб-сервиса, который позволяет пользователям просматривать доступные временные интервалы, создавать бронирования и отменять их при необходимости. Серверная часть такой системы должна обеспечивать хранение данных, обработку запросов клиентов, проверку прав доступа и защиту от некорректных операций, например, повторного бронирования одного и того же временного слота.
Целью работы является рассмотрение подхода к разработке серверной части веб-сервиса бронирования помещений с использованием языка программирования Go, базы данных PostgreSQL и инструмента контейнеризации Docker.
Основная часть
Разрабатываемая система может быть представлена как серверное приложение, предоставляющее клиенту набор HTTP-методов для работы с помещениями, расписанием, доступными слотами и бронированиями. Взаимодействие между клиентской и серверной частью удобно организовать на основе архитектурного стиля REST, поскольку он хорошо подходит для построения прикладных веб-сервисов и позволяет представить основные сущности системы в виде ресурсов. Общая структура разрабатываемой системы представлена на рисунке 1.

Рисунок 1. Структурная схема веб-сервиса бронирования помещений
К ключевым сущностям предметной области относятся пользователь, помещение, расписание, временной слот и бронирование. Пользователь выполняет действия в системе в зависимости от своей роли. Например, администратор может создавать помещения и расписание, а обычный пользователь — просматривать доступные слоты и создавать бронирования. Разграничение прав доступа позволяет снизить вероятность ошибочного изменения данных и делает систему более управляемой. Основные сущности и связи между ними представлены на рисунке 2.

Рисунок 2. Основные сущности базы данных веб-сервиса бронирования помещений
Язык Go подходит для разработки подобного сервиса за счет простоты синтаксиса, высокой производительности и развитых средств работы с сетевыми приложениями. Для серверного приложения на Go можно выделить несколько логических слоев: транспортный слой, слой бизнес-логики и слой доступа к данным. Транспортный слой отвечает за прием HTTP-запросов, проверку входных параметров и формирование ответов. Слой бизнес-логики содержит основные правила работы системы: проверку доступности слота, запрет бронирования прошедшего времени, запрет повторного бронирования и обработку отмены заявки. Слой доступа к данным отвечает за выполнение SQL-запросов и взаимодействие с PostgreSQL.
Такое разделение позволяет сделать код более понятным и удобным для сопровождения. Например, обработчик HTTP-запроса не должен напрямую содержать сложную логику проверки бронирования. Его задача — получить данные от клиента, передать их в сервисный слой и вернуть результат. В свою очередь, сервисный слой не должен зависеть от конкретных деталей HTTP, так как его назначение состоит в реализации правил предметной области.
Для хранения данных используется PostgreSQL. Реляционная модель хорошо подходит для системы бронирования, поскольку между сущностями существуют четкие связи. Помещение может иметь расписание, расписание определяет доступные интервалы времени, а бронирование связано с конкретным пользователем и временным слотом. При проектировании базы данных важно предусмотреть ограничения, предотвращающие появление противоречивых данных. Например, на уровне базы данных может использоваться уникальное ограничение, запрещающее создание двух активных бронирований на один и тот же слот.
Отдельного внимания требует задача формирования списка доступных слотов. Пользователь должен получить только те интервалы времени, которые соответствуют расписанию помещения, не находятся в прошлом и не заняты другими активными бронированиями. Для этого серверное приложение может выполнять выборку существующих бронирований из базы данных и сопоставлять их с расписанием помещения. При большом количестве пользователей и бронирований данный endpoint становится одним из наиболее нагруженных, поэтому необходимо учитывать производительность SQL-запросов и использовать индексы по ключевым полям, например по идентификатору помещения, дате, статусу бронирования и идентификатору слота.
Для аутентификации пользователей может применяться JWT-токен. После входа в систему пользователь получает токен, содержащий его идентификатор и роль. При последующих запросах сервер проверяет токен и определяет, какие действия доступны конкретному пользователю. Такой подход позволяет не хранить состояние пользовательской сессии на сервере и упрощает масштабирование приложения.
Контейнеризация с использованием Docker упрощает запуск приложения и подготовку окружения. Вместо ручной установки базы данных, зависимостей и переменных окружения можно описать сервисы в docker-compose-файле. В таком случае приложение и база данных запускаются одной командой, что особенно удобно при разработке, тестировании и передаче проекта другим пользователям. Кроме того, Docker позволяет создать изолированное тестовое окружение, максимально приближенное к рабочему.
Важным этапом разработки является тестирование. Для серверного приложения могут использоваться модульные, интеграционные и end-to-end тесты. Модульные тесты проверяют отдельные функции и методы, интеграционные — взаимодействие приложения с базой данных, а end-to-end тесты позволяют проверить работу системы через реальные HTTP-запросы. Например, можно протестировать сценарий создания пользователя, получения токена, просмотра доступных слотов, создания бронирования и последующей отмены. Такие проверки позволяют убедиться, что основные пользовательские сценарии работают корректно.
Также при разработке сервиса бронирования необходимо учитывать идемпотентность отдельных операций. Например, повторная отмена уже отмененного бронирования не должна приводить к ошибочному изменению состояния системы. Это важно для надежности веб-сервиса, поскольку клиент может повторно отправить запрос из-за сетевой ошибки или задержки ответа.
В качестве дополнительного направления развития системы можно рассмотреть интеграцию с внешними сервисами, например, с сервисом видеоконференций. В этом случае при создании бронирования пользователь может запросить автоматическое создание ссылки на онлайн-встречу. Однако подобные интеграции требуют обработки дополнительных ошибок, поскольку внешний сервис может быть временно недоступен. Поэтому основное бронирование и дополнительные функции должны быть разделены таким образом, чтобы сбой внешнего сервиса не нарушал целостность ключевых данных.
Таким образом, разработка серверной части веб-сервиса бронирования помещений требует учета как технических, так и предметных особенностей. Необходимо не только реализовать HTTP-методы, но и обеспечить корректную работу бизнес-правил, надежное хранение данных, разграничение прав доступа и удобство развертывания приложения.
Заключение
В ходе работы был рассмотрен подход к разработке серверной части веб-сервиса бронирования помещений с использованием Go, PostgreSQL и Docker. Были выделены основные сущности системы, описана структура приложения и показана роль REST API в организации взаимодействия между клиентом и сервером.
Использование Go позволяет создать производительное и достаточно простое в сопровождении серверное приложение. PostgreSQL обеспечивает надежное хранение данных и поддержку ограничений целостности, а Docker упрощает запуск проекта и подготовку тестового окружения. Разделение приложения на транспортный слой, слой бизнес-логики и слой доступа к данным способствует повышению читаемости кода и снижает связанность компонентов.
Рассмотренный подход может применяться при создании учебных и прикладных информационных систем, связанных с управлением расписанием, бронированием ресурсов и автоматизацией внутренних процессов организации.
Список литературы:
- Документация языка программирования Go [Электронный ресурс]. — Режим доступа — URL: https://go.dev/doc/ (дата обращения 03.05.2026)
- PostgreSQL Documentation [Электронный ресурс]. — Режим доступа — URL: https://www.postgresql.org/docs/ (дата обращения 03.05.2026)
- Docker Documentation [Электронный ресурс]. — Режим доступа— URL: https://docs.docker.com/ (дата обращения 03.05.2026)
- RFC 7519. JSON Web Token (JWT) [Электронный ресурс]. — Режим доступа — URL: https://datatracker.ietf.org/doc/html/rfc7519 (дата обращения 03.05.2026)

