Простой REST API на Go для управления списком задач. Приложение использует PostgreSQL в качестве базы данных, которая запускается в Docker-контейнере.
Чтобы запустить проект, выполните следующие шаги:
- Установите Docker и убедитесь, что он запущен.
- Запустите базу данных:
В корневой папке проекта выполните команду. Она создаст и запустит контейнер с PostgreSQL в фоновом режиме.
docker-compose up -d
- Установите зависимости Go:
Эта команда скачает все необходимые библиотеки, указанные в
go.mod.go mod tidy
- Запустите API сервер:
Можно собрать исполняемый файл и запустить его:
Сервер будет запущен и доступен по адресу
# Сборка go build -o api ./cmd/api # Запуск (для Windows) ./api.exe # Запуск (для Linux/macOS) ./api
http://localhost:8080.
Проект имеет следующую структуру, разделяя логику на несколько пакетов:
- /cmd/api/main.go: Главный файл, точка входа в приложение. Здесь происходит настройка зависимостей (база данных, обработчики) и запуск HTTP-сервера.
- /internal/: Основная логика приложения. Пакеты внутри
internalне могут быть импортированы другими проектами./database/: Логика для взаимодействия с базой данных (подключение, CRUD-операции для задач)./handlers/: Обработчики HTTP-запросов. Они принимают запросы, вызывают нужные методы из слоя базы данных и формируют JSON-ответы./models/: Go-структуры (Task,CreateTaskInput), которые описывают данные нашего приложения.
- /sql/init.sql: SQL-скрипт, который выполняется один раз при первом запуске контейнера с базой данных. Он создает таблицу
tasksи наполняет ее начальными данными. - docker-compose.yaml: Файл конфигурации для Docker Compose, который описывает, как запустить сервис с PostgreSQL.
- go.mod / go.sum: Файлы для управления зависимостями в Go-проекте.
API предоставляет следующие эндпоинты для управления задачами:
| Метод | URL | Описание | Тело запроса (JSON) |
|---|---|---|---|
GET |
/tasks/ |
Получить список всех задач. | (пусто) |
GET |
/tasks/{id} |
Получить одну задачу по её id. |
(пусто) |
POST |
/tasks/create |
Создать новую задачу. | {"title": "...", "description": "...", "completed": ...} |
PUT |
/tasks/{id} |
Обновить существующую задачу по её id. |
{"title": "...", "description": "...", "completed": ...} |
DELETE |
/tasks/{id} |
Удалить задачу по её id. |
(пусто) |
Docker — платформа для создания, развертывания и управления приложениями в изолированных средах, называемых "контейнерами". Позволяет запустить наше приложение с базой данных одинаково на любой машине. ... (остальные термины из вашего файла)
Модель (Model) — структура (struct) в Go, которая отражает таблицу в базе данных.
Handler (Обработчик) — функция в Go, которая принимает HTTP-запрос (http.Request), обрабатывает его и возвращает HTTP-ответ (http.ResponseWriter).
Database Driver (Драйвер БД) — библиотека, которая позволяет Go-приложению общаться с конкретной базой данных.
API (Application Programming Interface) — набор правил и инструментов, которые позволяют одним приложениям взаимодействовать с другими. REST API (RESTful API) — архитектурный стиль для проектирования сетевых интерфейсов. Эндпоинт (Endpoint) — конкретный URL-адрес, по которому API предоставляет доступ к определенной функции. HTTP-метод (HTTP Method) — глагол, который определяет тип операции над ресурсом:
- GET — получение данных.
- POST — создание новой записи.
- PUT / PATCH — обновление существующей записи (полное/частичное).
- DELETE — удаление записи.
Маршрутизация (Routing) — процесс определения того, какой обработчик (handler) должен выполниться для конкретного URL-адреса и HTTP-метода. В этом проекте используется стандартный http.ServeMux из библиотеки Go.
Middleware (Промежуточное ПО) — (новый термин) функция, которая "оборачивает" основной обработчик. Она может выполнять действия до или после него, например, логировать запросы, проверять аутентификацию или добавлять заголовки. В нашем проекте loggingMiddleware — пример такого ПО.
Запрос (Request) — то, что клиент отправляет на сервер. Ответ (Response) — то, что сервер отправляет обратно клиенту. JSON (JavaScript Object Notation) — легкий формат для обмена данными. CRUD — акроним для четырех базовых операций с данными: Create (Создать), Read (Прочитать), Update (Обновить), Delete (Удалить).