Создадим 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 теперь готов к промышленной эксплуатации.
Подробнее о настройке маршрута — здесь.
Читайте также:
- REST API CRUD в Laravel 11 с лучшими практиками
- Python FastAPI: OpenAPI, CRUD, PostgreSQL в Docker и внедрение зависимостей
- Как создать сетевой API с помощью Express.js, Bun и MongoDB
Читайте нас в Telegram, VK и Дзен
Перевод статьи Aryan Mehrotra: The Fastest Way to Build Your CRUD API in Golang!