Poniżej znajduje się zestaw zadań do samodzielnego wykonania. Zadania są podzielone na trzy poziomy trudności:
Dla każdego zadania:
Opis: Utwórz API, które przyjmuje dwie liczby i operację (dodawanie, odejmowanie, mnożenie, dzielenie) i zwraca wynik.
Wymagania:
/calc?a=10&b=5&op=add zwraca 15add, sub, mul, divPodpowiedź:
a, b i op z query parametersOpis: Utwórz serwer, który odbiera tekst i go powtarza.
Wymagania:
/echo przyjmuje JSON: {„text”: „hello”}{„echo”: „hello”, „length”: 5}/echo/hello zwraca: {„text”: „hello”}Podpowiedź:
ctx.json()Opis: Utwórz endpoint, który zwraca aktualny czas i datę.
Wymagania:
/time zwraca: {„time”: „14:30:45”, „date”: „2026-05-25”}/time/millis zwraca: {„millis”: 1748209845000}Podpowiedź:
LocalDateTime lub System.currentTimeMillis()Opis: Utwórz API licznika, który można zwiększać i resetować.
Wymagania:
/counter - zwraca obecną wartość/counter/increment - zwiększa o 1/counter/decrement - zmniejsza o 1/counter/reset - zerujePodpowiedź:
Opis: Utwórz prostą stronę HTML z przyciskiem, który wyśle request do backendu.
Wymagania:
index.html ze strony głównejClick me/api/hello zwraca {„message”: „Hello from backend!”}Opis: Utwórz API dla biblioteki książek z CRUD operacjami.
Wymagania:
Book z polami: id, title, author, year, available (boolean)/api/books - lista wszystkich/api/books/{id} - szczegóły jednej/api/books - dodaj nową/api/books/{id} - aktualizuj/api/books/{id} - usuńWskazówki:
Map<Integer, Book>Opis: Utwórz system rejestracji użytkowników z walidacją.
Wymagania:
/api/register z {„email”: „…”, „password”: „…”}@, hasło min 8 znakówWskazówki:
Mapemail.contains(„@”)Opis: Utwórz API do artykułów z możliwością filtrowania.
Wymagania:
/api/articles - wszystkie artykuły/api/articles?category=tech - filtrowanie po kategorii/api/articles?author=John - filtrowanie po autorze/api/articles?limit=5 - ograniczenie liczby wyników/api/articles?category=tech&limit=3Wskazówki:
stream().filter()limit()Opis: Dodaj logging do dowolnego API z wcześniejszych zadań.
Wymagania:
[INCOMING] GET /api/books[DONE] 200 OK (12ms)[ERROR] 404 Not FoundWskazówki:
config.routes.before() i config.routes.after()startTime w ctx.attribute()Opis: Utwórz API, które wymaga autentykacji tokenem.
Wymagania:
/api/public (bez tokenu)/api/secret (wymaga tokenu)Authorization: Bearer TOKEN123Wskazówki:
config.routes.before(„/api/secret”, …) do walidacjictx.header(„Authorization”)Bearer …Opis: Zintegruj Javalin z bazą SQLite do trwałego przechowywania danych.
Wymagania:
notes (id, title, content, created_at)/api/notes - pobierz z bazy/api/notes - zapisz w bazie/api/notes/{id} - aktualizuj w bazie/api/notes/{id} - usuń z bazyWskazówki:
SQLExceptionOpis: Zaimplementuj paginację dla API zwracającego dużą liczbę wyników.
Wymagania:
/api/products?page=1&size=10 - pierwsza strona, 10 wyników{„data”: […], „page”: 1, „size”: 10, „total”: 47}Wskazówki:
(page - 1) * sizestream().skip().limit()Opis: Utwórz API, które zwraca wiadomości w różnych językach.
Wymagania:
/api/message?lang=en zwraca: {„text”: „Hello”}/api/message?lang=pl zwraca: {„text”: „Cześć”}/api/message?lang=fr zwraca: {„text”: „Bonjour”}Wskazówki:
Map<String, Map<String, String»lang → key → valueOpis: Zaimplementuj rate limiting - ograniczenie liczby żądań na IP.
Wymagania:
X-RateLimit-Limit: 10X-RateLimit-Remaining: 7Wskazówki:
ctx.ip()Mapbefore()Opis: Utwórz prosty chat z WebSocket (opcjonalne - zaawansowane).
Wymagania:
Wskazówki:
app.ws() do obsługi WebSocketSet<WsContext>Utwórz kompletną aplikację TODO z:
Utwórz API dla sklepu internetowego:
Utwórz dwa mikroserwisy komunikujące się ze sobą:
Ogólne:
1. Przeczytaj zadanie do końca 2. Zidentyfikuj wymagane endpoints 3. Zaplanuj strukturę (Records, kontrolery, etc.) 4. Zacznij od prostych przypadków, potem rozszerz 5. Testuj każdy endpoint w Postmanie
Obsługa błędów:
{„error”: „…”}Testowanie:
curl -X GET http://localhost:8080/api/…Debugowanie:
System.out.println() do logowaniaRozwiązania do wszystkich zadań będą dostępne po zajęciach.
Do każdego rozwiązania dołączony będzie opis:
Powodzenia! 🚀