Acest proiect reprezintă un client HTTP scris în C++ care comunică cu un server REST API. Clientul permite efectuarea de operații precum autentificare, gestionare utilizatori, trimitere și primire de date în format JSON, folosind protocoalele HTTP/HTTPS.
Fișierele helper.cpp, helper.hpp, requests.cpp si requests.hpp a fost realizat pe baza cadrului oferit la laboratorul 9.
client.cpp– Punctul de intrare al aplicației, gestionează interacțiunea cu utilizatorul și apelează funcțiile principale.requests.cpp/requests.hpp– Implementarea și definirea funcțiilor pentru trimiterea cererilor HTTP (GET, POST, DELETE etc.).helper.cpp/helper.hpp– Funcții auxiliare pentru procesarea datelor, parsarea răspunsurilor și gestionarea erorilor.json.hpp– Bibliotecă pentru manipularea datelor JSON.Makefile– Script pentru compilarea proiectului.
- Compilator C++ (recomandat: g++ >= 9)
- nlohmann/json (inclus local ca
json.hpp)
In directorul curent, ruleaza comanda:
makeSe va genera un executabil numit client.
Execută clientul din terminal:
./clientUrmează instrucțiunile din linia de comandă pentru a interacționa cu serverul (autentificare, creare utilizator, trimitere cereri etc.).
Pentru manipularea datelor în format JSON, proiectul folosește biblioteca nlohmann/json, inclusă local ca json.hpp. Aceasta permite conversia rapidă și ușoară între structuri C++ și obiecte JSON.
În client.cpp, parserul JSON este folosit pentru:
- Parsarea răspunsurilor de la server: Răspunsurile HTTP primite de la server sunt extrase și convertite în obiecte JSON, permițând accesul facil la câmpuri precum
id,title,owner,moviesetc. - Construirea cererilor către server: Pentru operații precum autentificare, adăugare de utilizatori sau filme, datele sunt organizate în obiecte JSON și serializate înainte de a fi trimise către server.
- Manipularea listelor și obiectelor: Listele de utilizatori, filme sau colecții sunt parcurse și procesate direct ca vectori de obiecte JSON.
Exemplu de utilizare atat de construire cat si de parsare:
// Parsarea unui răspuns JSON
std::string ext_response = basic_extract_json_response((char *)response.c_str());
nlohmann::json body_response = nlohmann::json::parse(ext_response);
std::string title = body_response["title"];
// Construirea unui obiect JSON pentru trimitere
nlohmann::ordered_json credentials;
credentials["username"] = username;
credentials["password"] = password;
std::string credentials_dump = credentials.dump();login_admin– Autentificare ca administratoradd_user– Adăugare utilizator nou (admin)get_users– Listare utilizatori (admin)delete_user– Ștergere utilizator (admin)logout_admin– Deconectare administrator (admin)login– Autentificare ca utilizatorget_access– Obținere token de acces (JWT)get_movies– Listare filmeget_movie– Afișare detalii film după IDadd_movie– Adăugare film noudelete_movie– Ștergere film după IDupdate_movie– Actualizare detalii filmget_collections– Listare colecțiiget_collection– Afișare detalii colecție după IDadd_collection– Adăugare colecție nouădelete_collection– Ștergere colecție după IDadd_movie_to_collection– Adăugare film într-o colecțiedelete_movie_from_collection– Ștergere film dintr-o colecțielogout– Deconectare utilizatorexit– Ieșire din aplicație