Czas wykonania: 30-45 minut Poziom: Podstawowy Technologie: Dowolny język i framework (Node.js, Python, C#, Go)
Twoim zadaniem jest stworzenie prostego REST API dla menadżera zadań (TODO list). API powinno pozwalać na:
WAŻNE: Dane muszą być zapisywane w pliku JSON na serwerze (nie w pamięci RAM!).
Opis: Endpoint sprawdzający czy API działa Odpowiedź:
{
"status": "OK",
"timestamp": "2024-11-15T10:30:00Z"
}
Opis: Pobiera wszystkie zadania z pliku JSON Odpowiedź:
[
{
"id": 1,
"title": "Zrobić zakupy",
"description": "Mleko, chleb, masło",
"completed": false,
"createdAt": "2024-11-15T10:00:00Z"
},
{
"id": 2,
"title": "Odrobić zadanie z backendu",
"description": "REST API dla TODO",
"completed": true,
"createdAt": "2024-11-15T11:00:00Z"
}
]
Jeśli plik jest pusty:
[]
Opis: Dodaje nowe zadanie i zapisuje do pliku JSON
Request Body:
{
"title": "Nowe zadanie",
"description": "Opis zadania"
}
Odpowiedź (201 Created):
{
"id": 3,
"title": "Nowe zadanie",
"description": "Opis zadania",
"completed": false,
"createdAt": "2024-11-15T12:00:00Z"
}
Zasady:
id - automatycznie generowane (następny wolny numer)completed - domyślnie falsecreatedAt - automatycznie ustawiany timestamptasks.jsonOpis: Modyfikuje istniejące zadanie i zapisuje zmiany do pliku
Request Body (przykład):
{
"title": "Zaktualizowany tytuł",
"description": "Nowy opis",
"completed": true
}
Odpowiedź (200 OK):
{
"id": 1,
"title": "Zaktualizowany tytuł",
"description": "Nowy opis",
"completed": true,
"createdAt": "2024-11-15T10:00:00Z",
"updatedAt": "2024-11-15T13:00:00Z"
}
Jeśli zadanie nie istnieje (404 Not Found):
{
"error": "Task not found",
"id": 999
}
Plik powinien być zapisany w formacie JSON i zawierać tablicę zadań:
[
{
"id": 1,
"title": "Przykładowe zadanie",
"description": "To jest opis zadania",
"completed": false,
"createdAt": "2024-11-15T10:00:00Z"
}
]
Wymagania techniczne:
tasks.json lub data/tasks.json)git init).gitignore (żeby nie commitować node_modules, __pycache__ itp.)feat: add GET /tasks endpoint)git push)Twój plik README.md powinien zawierać:
# TODO API - Menadżer Zadań
**Autor:** [Twoje Imię]
**Grupa:** [Numer grupy]
**Data:** [Data]
## Opis projektu
REST API dla menadżera zadań z zapisem do pliku JSON.
## Technologie
- [Język programowania, np. Node.js]
- [Framework, np. Express.js]
- JSON (do przechowywania danych)
## Instalacja i uruchomienie
### Wymagania
- [np. Node.js 18+]
- [inne wymagania]
### Krok po kroku
```bash
# 1. Sklonuj repozytorium
git clone [URL_TWOJEGO_REPO]
# 2. Przejdź do katalogu
cd [nazwa-projektu]
# 3. Zainstaluj zależności (jeśli używasz)
npm install # lub pip install -r requirements.txt
# 4. Uruchom serwer
npm start # lub python main.py, dotnet run, go run main.go
Serwer powinien być dostępny pod adresem: http://localhost:3000
Opis: Sprawdza status API Przykład:
curl http://localhost:3000/health
Opis: Pobiera wszystkie zadania Przykład:
curl http://localhost:3000/tasks
Opis: Dodaje nowe zadanie Przykład:
curl -X POST http://localhost:3000/tasks \
-H "Content-Type: application/json" \
-d '{"title":"Nowe zadanie","description":"Opis"}'
Opis: Modyfikuje istniejące zadanie Przykład:
curl -X PUT http://localhost:3000/tasks/1 \
-H "Content-Type: application/json" \
-d '{"title":"Zaktualizowany","completed":true}'
[Opisz jak testowałeś API - Postman, Thunder Client, curl, itp.]
projekt/
├── server.js (lub main.py, Program.cs)
├── tasks.json (plik z danymi)
├── package.json (jeśli Node.js)
├── README.md
└── .gitignore
[Opcjonalnie - co sprawiło Ci problem i jak to rozwiązałeś]
---
## 🛠 WSKAZÓWKI TECHNICZNE
### Podstawowa struktura rozwiązania
Niezależnie od wybranego języka i frameworka, Twoje rozwiązanie powinno zawierać:
1. **Funkcje pomocnicze do operacji na pliku JSON:**
- Funkcja do odczytu zadań z pliku
- Funkcja do zapisu zadań do pliku
- Obsługa sytuacji gdy plik nie istnieje
2. **Endpointy REST API:**
- GET /health - zwraca status API
- GET /tasks - odczytuje i zwraca wszystkie zadania
- POST /tasks - tworzy nowe zadanie i zapisuje do pliku
- PUT /tasks/:id - aktualizuje zadanie i zapisuje do pliku
3. **Obsługa błędów:**
- Sprawdzanie czy zadanie istnieje (404)
- Walidacja danych wejściowych (400)
- Obsługa błędów serwera (500)
### Przykłady szkieletowe
**Node.js + Express:**
```javascript
const express = require('express');
const fs = require('fs').promises;
// TODO: Zaimplementuj funkcje readTasks() i writeTasks()
// TODO: Zaimplementuj endpointy zgodnie z wymaganiami
Python + FastAPI:
from fastapi import FastAPI
import json
# TODO: Zaimplementuj funkcje read_tasks() i write_tasks()
# TODO: Zaimplementuj endpointy zgodnie z wymaganiami
Pełne przykładowe rozwiązania dostępne są w oddzielnych plikach (dla prowadzących).
| Kryterium | Punkty |
|---|---|
| Działający endpoint GET /health | 10% |
| Działający endpoint GET /tasks (odczyt z pliku) | 25% |
| Działający endpoint POST /tasks (zapis do pliku) | 30% |
| Działający endpoint PUT /tasks/:id (modyfikacja w pliku) | 25% |
| README.md z instrukcjami | 5% |
| Historia commitów w Git | 5% |
Bonus (+10%):
"Stwórz funkcję w [język] która odczytuje dane z pliku JSON
i zwraca je jako tablicę obiektów"
"Jak zapisać tablicę obiektów do pliku JSON w [język/framework]?"
"Napisz endpoint POST w [framework] który dodaje element do tablicy
i zapisuje całą tablicę do pliku JSON"
"Jak znaleźć maksymalne ID w tablicy obiektów w [język]?"
"Wyjaśnij mi ten kod linia po linii: [wklej kod]"
Rozwiązanie: Sprawdź czy plik tasks.json istnieje. Jeśli nie, stwórz go z pustą tablicą []
Rozwiązanie: Sprawdź czy plik ma poprawny format JSON. Użyj https://jsonformatter.org/ do walidacji
Rozwiązanie: Zmień port w kodzie lub zamknij poprzednią instancję serwera
Rozwiązanie: Sprawdź czy wywołujesz funkcję zapisu (writeTasks / write_tasks) po modyfikacji danych
git push)Deadline: [Do uzupełnienia przez prowadzącego]
Narzędzia do testowania API:
Jeśli skończysz wcześniej, spróbuj dodać:
title nie jest pustyapi.logPowodzenia! 🎯