Разработка веб-приложения с помощью фреймворка Gin, интеграция его с БД psql и мой опыт хакатона GO HACK


Введение

Перед тем как углубиться в архитектуру того, что я переделал в приложении во время хакатона, я хотел бы рассказать о своем опыте своими словами.
Когда я впервые наткнулся на #GO Hack Challenge на devpost, я был ошеломлен поиском соответствующих треков, в которые я мог бы вписаться, и учебников, чтобы пополнить свои знания здесь и там, чтобы принять участие. Это была действительно возможность обучения для новичка, который хочет внести свой вклад или создать что-то под капотом.
Я вступил в проекты с открытым исходным кодом в рамках фонда CERN, где я даже не знал, что представляет собой экосистема вокруг проекта. Тогда мне стало очень любопытно. Затем я погрузился в один из проектов на несколько дней, изучил несколько проблем и внес небольшой вклад, исправив одну из ошибок. Я перешел к другому проекту, где нам нужно было создать любое приложение на базе golang. Я узнал об использовании функции generic, которая в настоящее время выпущена и используется в Go >= 18 версии. Мне удалось создать приложение на основе фреймворка Gin-Gonic и использовать в нем общие функции.

Монолитная архитектура сервисов позволяет разработчикам проще разрабатывать продукт и легче развертывать его, что в дальнейшем может помочь им резко достичь потребностей продукта. В конечном итоге это также повышает производительность разработки. В связи с этим я собираюсь кратко продемонстрировать вам, как построить веб-приложение, используя монолитный способ.

Это выглядит пугающе, когда вы никогда не слышали об этой архитектуре. Но когда вы начинаете строить вещи на ее основе, вы можете постепенно понять сферу применения этой архитектуры, т.е. когда и как ее использовать.

В качестве примера для построения монолитного сервиса мы возьмем приложение для управления ресурсами. Сервис приложения состоит из множества модулей, в число которых входят модули добавления ресурса, получения ресурса, входа в систему и т.д. Каждый модуль будет иметь свою собственную независимую бизнес-логику, и каждый модуль также будет зависеть от некоторых других. Например, модуль get resource (/resource/get-resc) будет зависеть от модуля login. В монолитном приложении такая зависимость обычно достигается вызовами методов между модулями. Монолитные сервисы обычно совместно используют ресурсы хранения данных, например MySQL, но в нашем случае это PSQL.

Общая архитектура монолитных сервисов относительно проста, что также является преимуществом монолитных сервисов.

Разработка

В этом разделе описывается, как быстро реализовать приложение для управления ресурсами монолитного сервиса на основе фреймворка gin из golang.
С помощью этого фреймворка мы можем быстро создавать, настраивать и развертывать ресурсы с помощью нескольких команд. Мы можем создавать и хранить наши API и конфигурации в централизованном репозитории в максимально возможном количестве.

Начало работы

Чтобы начать, я предполагаю, что у вас уже установлен и настроен GOlang и соответствующий пакет Go версии >=18 для этого приложения. Для получения более подробной информации, пожалуйста, следуйте официальным документам. После того, как мы установили все требования, мы перейдем к следующим шагам, чтобы поиграть с GO gin pkg для apis и gorm pkg для создания экземпляров базы данных.

Итак, давайте установим плагины и библиотеки шаг за шагом;

Следующие команды клонируют основные шаблоны для работы с API после клонирования репозитория. Пожалуйста, пока проигнорируйте файл docker.

После этого установите зависимости следующим образом; это позволит вам обновить установленный pkg.

go mod download

go mod tidy

Давайте погрузимся в файл main.go и создадим еще один файл внутри нашего routes dir.

Определение API модели пользователя и ресурса

type Resource struct {
    ID        int    `json:"id"`
    Title     string `json:"title"`
    Category  string `json:"category"`
    Status    string `json:"status"`
    Types     string `json:"types"`
    Content   string `json:"content"`
    FileLink  string `json:"file_link"`
    CreatedBy int    `json:"created_by"`
    CreatedAt int64  `json:"created_at"`
    UpdatedBy int    `json:"updated_by"`
    UpdatedAt int64  `json:"updated_at"`

type User struct {
    ID        int    `json:"id"`
    FirstName string `json:"first_name"`
    LastName  string `json:"last_name"`
    Password  string `json:"password"`
    Email     string `json:"email"`
    Role      string `json:"role"`
}

Вход в полноэкранный режим Выход из полноэкранного режима

Определение API модуля ресурсов

Add Resource details -> resource/add-resource
View Resource details -> resource/get-resc
Login User -> resource/login
Вход в полноэкранный режим Выход из полноэкранного режима

Другой способ обработки http запроса через http.HandleFunc для поддержки общей функции, как показано ниже.

Чтобы узнать больше о родовой функции, вы можете ознакомиться с этой ссылкой.

Теперь давайте немного углубимся в gorm pkg и psql pkg.

Поскольку мы фокусируемся на PostgreSql, мы рассмотрим sql-запросы, управляемые им, как показано ниже;
Для того чтобы выполнить программу, необходимо, чтобы в вашей системе был установлен psql:

Используя Linux env и запустив его терминал:

sudo apt install postgresql -> installs the psql

sudo -u postgres psql -> sudo into user name as postgress

psql --version -> checks version

export RESC_DB_DSN='postgres://USER_NAME:YOUR_PWD@localhost/DB_NAME' psql $RESC_DB_DSN

psql --host=localhost --dbname=DB_NAME --username=USER_NAME
Войти в полноэкранный режим Выйти из полноэкранного режима

Надеюсь, мы закончили с созданием psql и его использованием через gorm pkg.

Давайте запустим приложение с помощью go run main.go, затем с помощью POSTMAN API Client или команды curl вы сможете запросить тело.

Использование Postman

Что дальше!

Я с нетерпением жду добавления большего количества конечных точек API, чтобы использовать HTTP-запросы на постоянной основе, а также интеграции с кластером kubernetes.

Резюме

Приведенный выше пример показывает, что использовать go-gin gonic framework для разработки монолитных сервисов очень просто. Вам нужно только определить api файл, а затем инструмент goctl может автоматически сгенерировать код проекта. Нам остается только заполнить код бизнес-логики в пакете логики. В этой статье я просто показал, как быстро разрабатывать монолитные сервисы на основе go-gin, gorm pkgs и generic function. Надеюсь, вы найдете ее полезной и сможете использовать в своих приложениях.

Оцените статью
Procodings.ru
Добавить комментарий