VAII Cvičenie 09
Momentálne je otvorená vetva MASTER, 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ť?
- Preštudujte si metódu
loopbackMessage()v kontrolériHomeControllera pohľadloopbackMessage.view.php. Ako funguje posielanie a prijímanie dát? Ako framework vie, že boli dáta poslané pomocou AJAX volania?
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 API\AuthController a API\MessageController. V nich budete implementovať jednotlivé akcie.
V projekte nájdeme tiež modely User a Message, ktoré zodpovedajú tabuľkám v DB. Všimnite si implementáciu metód isActive() a getAllActive() v
triede User.
Nakoniec si prezrite testy v súbore \test\Tests.http. Skúste ich spustiť. 17 testov skončí chybou. Úlohou cvičenia bude implementovať metódy kontrolérov tak,
aby všetky testy prebehli úspešne.
-
API\AuthController- 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, akciaindexbude vracať HTTP kód 501 Not Implemented.login- Akcia prihlasovacie údaje v JSON objekte s dvomi atribútmiloginapassword. 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ý modelUsers 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útlogina 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 zoznamu používateľov (pole objektov typuUser), 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.
-
API\MessageController- 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.receiveMessage- Očakáva odoslanie správy s dvoma povinnými atribútmi:recipientamessage. Ak ich objekt neobsahuje, klientovi sa zašle HTTP odpoveď 400 Bad Request. Ďalšie podrobnosti:- Atribút
recipientobsahujenull, 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
messagenesmie obsahovať prázdnu hodnotu. - Ak atribút
recipientobsahuje 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:
getAllMessages- 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.