Простой REST API для управления задачами с аутентификацией через JWT, реализованный на Go с использованием Gin и PostgreSQL в Docker.
- Описание
- Технологии
- Установка
- Запуск
- Использование API
- Структура проекта
- Миграции базы данных
- Тестирование
API позволяет регистрировать пользователей, аутентифицироваться по JWT токену и работать с персональными задачами: создавать, обновлять, получать и удалять. Данные хранятся в PostgreSQL, база запускается в Docker контейнере. В проекте используется чистая работа с SQL через database/sql и миграции через goose.
- Go (Golang)
- Gin (HTTP фреймворк)
- PostgreSQL (База данных)
- Docker (для базы)
- goose (миграции базы)
- bcrypt (хеширование паролей)
- JWT (аутентификация)
- Клонировать репозиторий:
git clone https://github.com/EgorTolbaev/todo-api.git
cd todo-api- Установить зависимости:
go mod download- Создать и запустить базу в Docker:
docker-compose up -d- Задать переменную окружения с подключением к базе (если требуется):
export DATABASE_DSN="host=localhost port=5432 user=todo_user password=todo_pass dbname=todo_db sslmode=disable"- Запустить миграции:
goose -dir migrations postgres "$DATABASE_DSN" up- Запустить приложение:
go run ./cmd/main.goСервер будет доступен по адресу: http://localhost:8080
POST /register— регистрация пользователяPOST /login— получение JWT токена- Защищенные маршруты (требуют
Authorization: Bearer <token>):GET /tasks— получить список задач текущего пользователяPOST /tasks— создать новую задачуPUT /tasks/:id— обновить задачуDELETE /tasks/:id— удалить задачу
/cmd/main.go - точка входа, инициализация и запуск сервера
/internal/storage/ - работа с базой данных (разделена на user_storage.go и task_storage.go)
/internal/handlers/ - обработчики HTTP запросов
/internal/router.go - настройка маршрутов и middleware
/internal/storage/migrations/ - миграции базы данных goose
/docker-compose.yml - конфигурация для запуска PostgreSQL в Docker
Для управления схемой используется goose.
- Создавайте миграции командой:
goose create <имя_миграции> sql- Применяйте миграции:
goose -dir migrations postgres "$DATABASE_DSN" up- Откатывайте миграции:
goose -dir migrations postgres "$DATABASE_DSN" downДля тестирования API можно использовать Postman или curl. Пример последовательности:
- Зарегистрироваться через
POST /register - Залогиниться в
POST /loginи получить JWT - Передавать токен в заголовке
Authorizationдля работы с задачами