VAII Cvičenie 09
Momentálne je otvorená vetva MAIN, ktorá obsahuje štartér. Riešenie obsahuje vetva SOLUTION.
- Otvorte si Web developer tool a prepnite sa na kartu Sieť.
- Načítajte ľubovoľný web z internetu a pozrite si, ako vyzerá komunikácia medzi prehliadačom a web serverom.
- Akú verziu protokolu a aké metódy najčastejšie používajú? Čo všetko vieme z tejto komunikácie zistiť?
- Vytvorte metódu
showJson()
v kontrolériHomeController
. Metóda vytvorí jednu správu (modelMessage
) a zobrazí ju vo formáte JSON. - Preštudujte si pohľad
sendJson.view.php
. Čo robí? - Vytvorte metódu
receiveJson()
v kontrolériHomeController
. Metóda príjme JSON data správy a pošle ich späť.
Cieľom tohto cvičenia je vytvoriť webové API k serverovej časti čet aplikácie s použitím frameworku vajiíčko. Samotný čet budeme vytvárať na ďalšom cvičení.
Preštudujte si súbory v štartéri. Štartér obsahuje Vaííčko framework. V adresári docker\sql
sa nachádza súbor ddl.sql
, ktorý Vám vytvorí DB tabuľky,
potrebné pre tento projekt a naplní DB niekoľkými záznamami. Projekt obsahuje aj SimpleAuthenticator
na jednoduché overenie mena a hesla. V projekte sa
nachádzajú aj pripravené kontroléry AuthApiController
a MessageApiController
. V nich budete implementovať jednotlivé akcie.
V projekte nájdeme tiež modely Login
a Message
, ktoré zodpovedajú tabuľkám v DB. Všimnite si implementáciu metód isActive()
a getAllActive()
v
triede Login
. Nakoniec si prezrite aj testy v súbore \test\Tests.http
. Skúste ich spustiť. Úlohou cvičenia bude implementovať metódy kontrolérov tak,
aby všetky testy prebehli úspešne.
-
AuthApiController
- Má na starosti operácie týkajúce sa používateľa a vracia informácie o ňom. Obsahuje tieto už implementované akcie:index
- Keďže ide o API, akciaindex
bude vracať HTTP kód 501 Not Implemented.login
- Akcia prihlasovacie údaje v JSON objekte s dvomi atribútmilogin
apassword
. V prípade, ak ich objekt neobsahuje, alebo budú mať prázdnu hodnotu, vráti HTTP kód 400 Bad Request. Ak sa podarí prihlásenie, vytvorí sa nový modelLogin
s aktuálnym časom. Ak už prihlásenie existuje, upraví sa jeho atribútlast_action
. Po úspešnom overení používateľa sa vráti klientovi prázdna odpoveď (empty response).
Je potrebné vytvoriť tieto akcie:
logout
- Skontroluje, či je používateľ prihlásený. Ak áno, odhlási ho a zmaže záznam o jeho logine z DB. Ak nie je prihlásený, neurobí nič. Na konci vždy vráti klientovi empty response.status
- Ak je používateľ prihlásený, klient dostane JSON odpoveď s objektom, ktorý obsahuje atribútlogin
a má hodnotu aktuálne mena prihláseného používateľa. Neprihlásenému používateľovi vráti HTTP kód 401 Unauthorized.activeUsers
- Ak je používateľ prihlásený, klient dostane JSON odpoveď v podobe poľa objektov typuLogin
používateľov, ktorí sú aktívni. Aktívny používateľ je každý používateľ po dobu 30 sekúnd od poslednej žiadosti o získanie správ. Pokiaľ žiadnych aktívnych používateľov nenájde, vráti prázdne pole. Ak je používateľ neprihlásený, vráti HTTP kód 401 Unauthorized.
-
MessageApiController
- Poskytuje API pre odosielanie a získavanie správ. Všetky akcie tohto kontroléra sú určené iba pre prihlásených používateľov. Obsahuje tieto už implementované akcie:index
- Keďže sa jedná o API, index bude vracať HTTP kód 501 Not Implemented.sendMessage
- Očakáva odoslanie správy s dvoma povinnými atribútmi:recipient
amessage
. Ak ich objekt neobsahuje, klientovi sa zašle HTTP odpoveď 400 Bad Request. Ďalšie podrobnosti:- Atribút
recipient
obsahujenull
, ak je správa verejná. Ak je správa privátna, tento atribút obsahuje login používateľa, komu je určená. - Atribút
message
nesmie obsahovať prázdnu hodnotu. - Ak atribút
recipient
obsahuje hodnotu a daný používateľ nie je aktívny, klientovi sa zašle HTTP odpoveď 400 The recipient is not available. - Po uložení správy na serveri, sa klientovi zašle empty response.
- Atribút
Je potrebné vytvoriť túto akciu:
getMessages
- Získa všetky správy. Pošlú sa správy, ktoré používateľ odoslal, verejné správy a jemu poslané privátne správy. Metóda môže prijať parameterlastId
, ktorý klientovi zašle správy od zadaného id.
Pár poznámok k testom:
- Testy needitujte.
- Vytvorte API tak, aby všetky testy prebehli úspešne.
- Jednotlivé HTTP dopyty sa dajú púšťať jednotlivo, niektoré sú závislé ne iných testoch, preto nemusia byť úspešné.
Pokiaľ sa chcete dostať k riešeniu z cvičenia je potrebné otvoriť si príslušnú vetvu, ktorej názov sa skladá:
MIESTNOST + "-" + HODINA ZAČIATKU + "-" + DEN
Ak teda navštevujete cvičenie pondelok o 08:00 v RA323, tak sa vaša vetva bude volať: RA323-08-PON
Cvičenie používa framework vaííčko dostupný v repozitári https://github.com/thevajko/vaiicko. Pre úspešné riešenie
projektu je potrebné spustiť docker konfiguráciu zo súboru docker\docker-compose.yml
.