Описание
Написать REST API для управления списком задач на Go с использованием фреймворка Echo. Проект объединяет всё что мы изучили: типы данных, структуры, интерфейсы, конкурентность, контекст и работу с HTTP.
Требования
Что нужно реализовать
Приложение должно хранить задачи в памяти (обычный map) и предоставлять REST API для работы с ними.
Модель задачи:
{
"id": 1,
"title": "Купить молоко",
"done": false,
"created_at": "2024-01-15T10:30:00Z"
}
Эндпоинты
| Метод | URL | Описание |
|---|---|---|
GET | /api/todos | Получить все задачи |
GET | /api/todos/:id | Получить задачу по ID |
POST | /api/todos | Создать задачу |
PUT | /api/todos/:id | Обновить задачу |
DELETE | /api/todos/:id | Удалить задачу |
GET | /health | Проверка что сервер жив |
Детали каждого эндпоинта
POST /api/todos — создать задачу
Тело запроса:
{ "title": "Купить молоко" }
Успешный ответ 201 Created:
{ "id": 1, "title": "Купить молоко", "done": false, "created_at": "..." }
Ошибка если title пустой 400 Bad Request:
{ "error": "title is required" }
GET /api/todos — получить все задачи
Успешный ответ 200 OK:
[
{ "id": 1, "title": "Купить молоко", "done": false, "created_at": "..." },
{ "id": 2, "title": "Позвонить маме", "done": true, "created_at": "..." }
]
Если задач нет — вернуть пустой массив [], не null.
GET /api/todos/:id — получить задачу по ID
Успешный ответ 200 OK:
{ "id": 1, "title": "Купить молоко", "done": false, "created_at": "..." }
Ошибка если не найдена 404 Not Found:
{ "error": "todo not found" }
PUT /api/todos/:id — обновить задачу
Тело запроса (оба поля опциональны):
{ "title": "Купить хлеб", "done": true }
Успешный ответ 200 OK — возвращает обновлённую задачу.
Ошибка если не найдена 404 Not Found:
{ "error": "todo not found" }
DELETE /api/todos/:id — удалить задачу
Успешный ответ 204 No Content — пустое тело.
Ошибка если не найдена 404 Not Found:
{ "error": "todo not found" }
GET /health — health check
Успешный ответ 200 OK:
{ "status": "ok" }
Технические требования
- Фреймворк: Echo v4
- Хранилище: map в памяти — никаких баз данных
- Конкурентный доступ к map защищён через sync.RWMutex
- ID задач генерируются автоматически и увеличиваются последовательно
- Сервер запускается на порту :8080
- Сервер поддерживает Graceful Shutdown (SIGINT/SIGTERM)
- Middleware: Logger и Recover из echo/middleware
Что не нужно
- База данных
- Аутентификация
- Пагинация
- Сложная архитектура — можно всё в одном файле
main.go
Как тестировать через Postman
Postman — инструмент для тестирования API. Позволяет отправлять HTTP-запросы и смотреть ответы без написания кода.
Установка
Скачать с postman.com — есть версия для Windows, Mac и Linux. Также есть веб-версия без установки.
Базовое использование
Создать задачу:
- Выбрать метод
POST - URL:
http://localhost:8080/api/todos - Вкладка
Body→raw→JSON - Вставить тело:
{"title": "Купить молоко"} - Нажать
Send
Получить все задачи:
- Метод
GET - URL:
http://localhost:8080/api/todos - Нажать
Send
Обновить задачу:
- Метод
PUT - URL:
http://localhost:8080/api/todos/1 - Body → raw → JSON:
{"done": true} - Нажать
Send
Удалить задачу:
- Метод
DELETE - URL:
http://localhost:8080/api/todos/1 - Нажать
Send
Коллекция запросов
В Postman можно сохранить все запросы в коллекцию — кнопка Save после каждого запроса. Это удобно чтобы не вводить URL каждый раз заново.
Фронтенд для проверки
Сохрани этот файл как index.html рядом с проектом и открой в браузере. Он автоматически подключается к серверу на localhost:8080:Вот что у нас есть для ученика:
Фронтенд умеет:
- Показывать статус сервера (online/offline) через
/health - Создавать задачи (Enter или кнопка)
- Отмечать выполненными через
PUT /api/todos/:id - Удалять через
DELETE /api/todos/:id - Фильтровать: Все / Активные / Выполненные
- Показывать лог всех запросов к API с методом, статусом и временем ответа
Инструкция для ученика:
- Написать сервер согласно требованиям
- Запустить:
go run main.go - Открыть
index.htmlв браузере - Параллельно смотреть в Postman детали запросов/ответов