Aplikacja do zarządzania zadaniami
Przedmiotem zadania jest zaimplementowanie aplikacji internetowej do zarządzania zadaniami. Aplikacja umożliwia tworzenie użytkowników oraz zarządzanie prostymi zadaniami (tworzenie, wyświetlanie, usuwanie, ...)
-
Aplikacja powinna udostępniać zasoby i funkcjonalność poprzez REST API
-
Aplikacja powinna być dostępona pod adresem http://localhost:8080
-
Aplikacja powinna obsługiwać treści żądań w formacie JSON
-
Aplikacja powinna zwracać treści odpowiedzi w formacie JSON
-
Aplikacja powinna obsługiwać następujące żądania HTTP
- metoda - metoda HTTP żądania,
- adres - ścieżka adresu URL żądanego zasobu,
- nagłówki - zmienne wysyłane w nagłówku żądania,
- parametry - zmienne wysyłane w ścieżce zasobu,
- treść - przykład ewentualnej treści żądania,
- odpowiedzi - obsługiwane kody statusu oraz przykład ewentualnej treści odpowiedzi
metoda adres nagłówki parametry ciało odpowiedzi POST /todo/user {
"username": "janKowalski",
"password": "am!sK#123"
}- 201
- 400
- 409
POST /todo/task auth {
"description": "Kup mleko",
"due": "2021-06-30"
}- 201
{
"id": "237e9877-e79b-12d4-a765-321741963000"
} - 400
- 401
GET /todo/task auth - 200
[
{
"id": "237e9877-e79b-12d4-a765-321741963000",
"description": "Kup mleko",
"due": "2021-06-30"
}
] - 400
- 401
GET /todo/task/{id} auth id - 200
{
"id": "237e9877-e79b-12d4-a765-321741963000",
"description": "Kup mleko",
"due": "2021-06-30"
} - 400
- 401
- 403
- 404
PUT /todo/task/{id} auth id {
"description": "Kup mleko",
"due": "2021-06-30"
}- 200
{
"id": "237e9877-e79b-12d4-a765-321741963000",
"description": "Kup mleko",
"due": "2021-06-30"
} - 400
- 401
- 403
- 404
DELETE /todo/task/{id} auth id - 200
- 400
- 401
- 403
- 404
- auth - ciąg znaków 'base64(username):base64(password)', gdzie base64() oznacza funkcję kodującą algorytmem Base64. Np., dla
użytkownika
{ "username": "janKowalski", "password": "am!sK#123" }
,auth
będzie równeamFuS293YWxza2k=:YW0hc0sjMTIz
- id - unikalny identyfikator zadania w formacie UUID
⚠️ Informacje o tym, które nagłówki, parametry lub pola w dokumentach JSON są wymagane, znajdują się w szczegółowej dokumenatcji Swagger API aplikacji -
Aplikacja powinna zwracać odpowiedź z kodem
404
(HTTP Not Found) dla nieobsługiwanych adresów -
Zadania i użytkownicy stworzeni przy użyciu żądań, powinni być pamiętane w ramach jednokrotnego uruchomienia aplikacji
-
Implementacja powinna zawierać testy jednostkowe sprawdzające wszystkie obsługiwane żądania
-
Testy jednostkowe powinny sprawdzać wszystkie scenariusze użycia wyspecyfikowane w dokumentacji (zwracanie wszystkich możliwych odpowiedzi)
-
Aplikacja powinna logować najważniejsze informacje w trakcie działania aplikacji
- Treści żądań i odpowiedzi mogą być serializowane oraz deserializowane przy użyciu klas z zewnętrznych bibliotek, np. Gson lub Jackson
- Logowanie może być zaimplementowane przy użyciu zewnętrznych bibliotek, np. Logback lub Log4J
- Główna klasa powinna nazywać się
ToDoApplication
- Klasa główna powinna znajdować się w pakiecie
efs.task.todoapp
- Klasa główna powinna posiadać bezparametrowy konstruktor z dostępem conajmniej pakietowym
- W klasie głównej powinna znajdywać się zaimplementowana metoda
public HttpServer createServer();
- Aplikacja powinna być zaimplementowana wyłącznie z użyciem klas z JDK z wyjątkiem bibliotek wymienionych w powyższym punkcie
Przy ocenie zadania pod uwagę będą brane następujące elementy:
- wynik uruchomienia automatycznych testów
- opinia prowadzącego na temat zaimplementowanego kodu
- opinia prowadzącego na temat zaimplementowanych testów
- rozwiązanie ewentualnych uwag prowadzącego do rozwiązania umieszczonych w repozytorium
Aplikacja powinna być zaimplementowane w sposób umożliwiający łatwe rozszerzanie bądź zmianę funkcjonalności.
Jako element ćwiczenia, można spodziewać się zmiany wymagań np.:
- inicjalizowanie aplikacji danymi wczytywanymi z pliku
- logi z aplikacji zapisywane do pliku
- aplikacja powinna obsługiwać treści żądań w formacie XML
- dodanie pola
status
w zadaniach - wyświetlanie zaległych zadań