REST API для управления задачами (TODO-лист) на Go с использованием Fiber и PostgreSQL.
- Описание
- Требования
- Установка
- Миграции
- Переменные окружения
- Запуск приложения
- API эндпоинты
- Примеры запросов
- Очистка и остановка
Это учебный проект для демонстрации CRUD-операций над задачами (tasks) через HTTP API.
- Язык: Go 1.21+
- Веб-фреймворк: Fiber
- БД: PostgreSQL (pgx)
- Миграции: SQL-скрипты из папки
migrations/
- Docker & Docker Compose
- Go 1.21 и выше (для локального запуска)
- Скопировать
.env.example
в.env
и при необходимости изменить значения. - Запустить контейнеры:
docker-compose up --build -d
- Проверить логи (не обязательно):
docker-compose logs -f app
Контейнер PostgreSQL автоматически инициализирует базу из migrations/
.
- Установить зависимости:
go mod download
- Скопировать
.env.example
в.env
и заполнить параметры доступа к локальной БД. - Выполнить миграцию (например, через
psql
или любой мигратор):psql "host=$DB_HOST port=$DB_PORT user=$DB_USER password=$DB_PASSWORD dbname=$DB_NAME sslmode=$DB_SSLMODE" -f migrations/0001_create_tasks_table.sql
- Запустить приложение:
go run cmd/server/main.go
SQL-файл migrations/0001_create_tasks_table.sql
создаёт таблицу:
CREATE TABLE IF NOT EXISTS tasks (
id SERIAL PRIMARY KEY,
title TEXT NOT NULL,
description TEXT,
status TEXT CHECK (status IN ('new','in_progress','done')) DEFAULT 'new',
created_at TIMESTAMP DEFAULT now(),
updated_at TIMESTAMP DEFAULT now()
);
DB_HOST=postgres # адрес хоста PostgreSQL
DB_PORT=5432 # порт БД
DB_USER=postgres # пользователь БД
DB_PASSWORD=password # пароль
DB_NAME=todo # имя БД
DB_SSLMODE=disable # sslmode
APP_PORT=8080 # порт приложения
- Docker:
docker-compose up --build
- Локально:
go run cmd/server/main.go
После старта сервер слушает на http://localhost:${APP_PORT}
.
Метод | URL | Описание |
---|---|---|
POST | /tasks |
Создать новую задачу |
GET | /tasks |
Получить список всех задач |
PUT | /tasks/:id |
Обновить задачу по ID |
DELETE | /tasks/:id |
Удалить задачу по ID |
curl -X POST http://localhost:8080/tasks \
-H "Content-Type: application/json" \
-d '{
"title": "Buy milk",
"description": "2 liters of milk",
"status": "new"
}'
curl http://localhost:8080/tasks
curl -X PUT http://localhost:8080/tasks/1 \
-H "Content-Type: application/json" \
-d '{
"title": "Buy milk and bread",
"description": "2 liters of milk, 1 loaf bread",
"status": "in_progress"
}'
curl -X DELETE http://localhost:8080/tasks/1
- Остановить контейнеры:
docker-compose down
- Удалить том с данными PostgreSQL (если нужно):
docker-compose down -v