Skip to content

saponite/Todo-REST_API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Todo REST API

Обычный 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: todo

Запустите PostgreSQL в Docker.

docker 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

# 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:

API-эндпоинты.

Метод Конечная точка Описание
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  }
]

Получить задачу по id.

curl http://localhost:8080/tasks/1

Обновить задачу по id.

curl -X PUT http://localhost:8080/tasks/1 \
  -H "Content-Type: application/json" \
  -d '{"title": "Купить машину.", "done": true}'

Удалить задачу по id.

curl -X DELETE http://localhost:8080/tasks/1

Лицензия.

MIT License

About

No description or website provided.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages