Создадим CRUD API с таблицей в MySQL за менее чем 50 строк кода.

Согласно информации на официальном сайте, GoFr  —  своенравный фреймворк Go для ускоренной разработки микросервисов с проверенным кодом в реальной производственной среде и встроенными инструментами наблюдаемости: URL-адресами проверки работоспособности, трассировкой, метриками и структурированными логами разного уровня для мониторинга приложения.

Потребуется

MySQL

Настраиваем MySQL как контейнер Docker:

docker run --name gofr-mysql -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=user -p 3306:3306 -d mysql:8.0.30

GoFr

Получаем gofr:

go get gofr.dev

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

Погрузимся в код и пошагово создадим CRUD API:

Этап 1. Настройка среды

Сначала импортируем необходимые пакеты и определяем пользовательскую структуру, то есть модель данных для API:

// Импорт необходимых пакетов
package main

import (
"gofr.dev/pkg/gofr"
"gofr.dev/pkg/gofr/migration"
)

// Определение структуры «user»
type user struct {
Id int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
IsEmployed bool `json:"isEmployed"`
}

Этап 2. Подключение к базе данных

Подключаемся к БД, добавив в файле .env каталога configs эти конфигурации:

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=password
DB_NAME=user
DB_PORT=2001
DB_DIALECT=mysql

Этап 3. Создание таблицы БД

Затем, определяя SQL-запрос, создаем в базе данных MySQL таблицу user:

// SQL-запрос для создания таблицы «user»
const createTable = `CREATE TABLE IF NOT EXISTS user (
id int not null primary key,
name varchar(50) not null,
age int not null,
isEmployed bool not null
);`

Для выполнения этого запроса создаем функцию миграции:

// Функция для создания миграции таблицы «user»
func createTableUser() migration.Migrate {
return migration.Migrate{
UP: func(d migration.Datasource) error {
_, err := d.SQL.Exec(createTable)
if err != nil {
return err
}
return nil
},
}
}

Этап 4. Реализация API

Теперь, чтобы инициализировать экземпляр GoFr, выполнить миграции и добавить REST-обработчики операций CRUD, настраиваем функцию main:

// Основная функция
func main() {
// Инициализация экземпляра GoFr
a := gofr.New()

// Выполнение миграций
a.Migrate(map[int64]migration.Migrate{1: createTableUser()})

// Добавление обработчиков REST
err := a.AddRESTHandlers(&user{})
if err != nil {
return
}

// Запуск сервера
a.Run()
}

С GoFr выполнение CRUD-задач  —  создание, чтение, обновление, удаление  —  упрощается автоматическим генерированием обработчиков прямо из структур Go. Благодаря этой функциональности разработчики, вместо того чтобы множить шаблонный код, концентрируются на логике приложения.

Заключение

Мы создали CRUD API с помощью GoFr и базы данных MySQL менее чем за 50 строк кода. Вам остается расширить и настроить API под конкретные требования.

Хотя проверка вводимых значений сейчас не выполняется, в значения базы данных по-прежнему легко вносятся изменения  —  без композиции запросов или сканирования строк.

Что касается микросервисов, менее чем в 50 строках кода мы создали простейший компонент  —  слой данных, размещаемый под функциональным слоем или любой высокоуровневой абстракцией. И таким образом избавились от проблем, связанных с прямым взаимодействием с базой данных при изменении сущностей.

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

Мало того, благодаря разнообразным инструментам наблюдаемости API теперь готов к промышленной эксплуатации.

Подробнее о настройке маршрута  —  здесь.

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Aryan Mehrotra: The Fastest Way to Build Your CRUD API in Golang!

Предыдущая статьяРасшифровка собеседования разработчика в Cisco 2024: Java, Spring Boot, Hibernate