Momentálne je otvorená branch MAIN, ktorá obsahuje štartér. Riešenie obsahuje branch SOLUTION.
Cieľom tohto cvičenia je vytvoriť webové API k serverovej časti chatovacej aplikácie s použitím frameworku vajiíčko. API sa bude skladať z dvoch častí:
AuthApiController
- má na starosti operácie týkajúce sa výlučne používateľa a informácií o ňom. Bude obsahovať nasledovné akcie:index
- keďže sa jedná o API, index bude vracať HTTP kód 501 Not Implementedlogin
- login bude očakávať odoslanie prihlasovacích údajov v JSON objekte s dvomi atribútmilogin
apassword
. V prípade ak ich objekt nebude obsahovať alebo budú mať prázdnu hodnotu vracia HTTP kód 400 Bad Request. Ak sa podarí prihlásenie vytvorí sa nový záznam modelLogin
s aktuálnym časom. Ak už prihlásenie existuje upraví sa jeholast_action
. Pri úspešnom prebehnutí loginu sa vracia klientovi empty response.logout
- skontroluje, či je používateľ prihlásený, ak áno odhlási ho a zmaže záznam o logine s tabuľkylogins
. Ak nie, nič neurobí. Na konci vždy vrácia klientovi empty response.status
- Ak je používateľ prihlásený klient dostane JSON odpoveď s objektom, ktorý ma iba jeden atribútlogin
a obsahuje login aktuálne 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ívny. Ako aktívny používateľ je každý používateľ po dobu 30 sekúnd od posledného dopytu na získanie správ, pokiaľ žiadnych aktívnych používateľov nenájde vracia prázdne pole. Ak je používateľ neprihlásený vracia HTTP kód 401 Unauthorized.
MessageApiController
- poskytuje API pre odosielanie a získavanie správ. Všetky akcie tohto kontrolera sú iba pre prihlásených používateľov.index
- keďže sa jedná o API, index bude vracať HTTP kód 501 Not ImplementedsendMessage
- očakáva odoslanie potrebných dát v JSON objekte s dvoma povinnými atribútmi:recipient
amessage
. Ak ich objekt neobsahuje klientovi sa zašle HTTP odpoveď 400 Bad Request. Ďalej platí:recipient
obsahujenull
ak správa nie je privátna. Ak je 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 Bad Request - Ak sa správa uloží klientovi sa zašle empty response.
getMessages
- vráti vždy posledných maximálne 30 správ. Klientovi sa posielajú správy, ktorá odoslal, verejné správy a jemu poslané privátne správy. Metóde sa môže zaslať atribútlastId
, ktorý zašle klientovi jemu prístupné správy od daného Id. API teda umožňuje prebrať aj neskoršie správy.
Nakoľko náležitostí, ktoré je potrebne kontrolovať je veľa, pridali sme k tomuto projektu HTTP testy. Tie sa nachádzajú v <root>/test/Tests.http
. Pár poznámok:
- Testy needitujte.
- Vytvorte API tak, aby všetky testy boli úspešne.
- Jednotlivé HTTP dopyty sa dajú púšťať jednotlivo ale je potrebné chápať s akým kontextom pracujú.
Framework ma v adresári <root>/docker
základnú konfiguráciu pre spustenie a debug web aplikácie. Všetky potrebné služby sú v docker-compose.yml
. Po ich spustení sa vytvorí:
- WWW document root je nastavený adresár riešenia, čiže web bude dostupný na adrese http://localhost/. Server má pridaný modul pre
ladenie móde" (
xdebug.start_with_request=yes
). - webový server beží na PHP 8.2 s Xdebug 3 nastavený na port 9003 v "auto-štart" móde
- PHP ma doinštalované rozšírenie PDO
- databázový server s vytvorenou databázou a tabuľkami
messages
ausers
na porte 3306 a bude dostupný nalocalhost:3306
. Prihlasovacie údaje sú:- MYSQL_ROOT_PASSWORD: db_user_pass
- MYSQL_DATABASE: databaza
- MYSQL_USER: db_user
- MYSQL_PASSWORD: db_user_pass
- phpmyadmin server, ktorý sa automatický nastavený na databázový server na porte 8080 a bude dostupný na adrese http://localhost:8080/