Обычный REST API для управления задачами.
Использовались библиотеки chi для управления HTTP запросами, pgx для работы с БД postgres. Проект контейнеризирован с использованием Docker и Docker Compose.
- Go 1.21+;
- Docker и Docker Compose;
- Linux / macOS / Windows. Протестировано на macOS.
git clone https://github.com/saponite/Todo-REST_API.git
cd Todo-REST_APIСоздайте файл .env внутри директории Todo-REST_API и укажите параметры для имени пользователя БД, пароля и названия БД.
Например:
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
POSTGRES_DB: tododocker compose up -dПодключитесь к БД и запустите ее.
CREATE TABLE IF NOT EXISTS tasks (
id SERIAL PRIMARY KEY,
title TEXT NOT NULL,
done BOOLEAN NOT NULL DEFAULT FALSE
);Можно воспользоваться файлом migrations/init.sql.
docker exec -i postgres psql -U $POSTGRES_USER -d $POSTGRES_DB < migrations/init.sqlВажно убедиться, что переменные среды экспортированы.
go build main.go
./mainИли запустить командой
go run .Сервер запустится по адресу localhost:8080, порт 8080.
# docker-compose.yml
services:
postgres:
image: postgres:16-alpine
container_name: todo-postgres
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
POSTGRES_DB: todo
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:| Метод | Конечная точка | Описание |
|---|---|---|
POST |
/tasks |
Создать новую задачу. |
GET |
/tasks |
Вывести все задачи. |
GET |
/tasks/{id} |
Вывести задачу по id. |
PUT |
/tasks/{id} |
Обновить задачу по id. |
DELETE |
/tasks/{id} |
Удалить задачу по id. |
curl -X POST http://localhost:8080/tasks \
-H "Content-Type: application/json" \
-d '{"title": "Купить машину."}'{
"id": 1,
"title": "Купить машину.",
"done": false
}curl http://localhost:8080/tasks[
{ "id": 1, "title": "Купить машину.", "done": false },
{ "id": 2, "title": "Купить две машины", "done": true }
]curl http://localhost:8080/tasks/1curl -X PUT http://localhost:8080/tasks/1 \
-H "Content-Type: application/json" \
-d '{"title": "Купить машину.", "done": true}'curl -X DELETE http://localhost:8080/tasks/1