Laboratorul 06. Arhitectura client-server

Obiective laborator

  • Înțelegerea conceptelor de bază
  • Explicarea arhitecturii client-server și diferențele față de alte arhitecturi
  • Definirea rolurilor clientului și serverului în contextul aplicațiilor distribuite
  • Mecanisme de comunicare
  • Explicarea protocoalelor de comunicație între client și server (HTTP)
  • Coduri de status
  • Cum funcționează cererile și răspunsurile (request-response cycle)

Arhitectura client-server

Arhitectura client-server reprezintă un model de proiectare utilizat în dezvoltarea de aplicații distribuite. În acest model, două entități distincte comunică pentru a furniza funcționalitatea unei aplicații: clientul și serverul.

Clientul

Clientul este entitatea care inițiază cererea către server. De obicei, acesta este un utilizator final sau un dispozitiv care solicită resurse, date sau servicii de la server. Exemple de clienți includ browsere web, aplicații mobile sau desktop-uri.

Serverul

Serverul este entitatea care procesează cererea primită de la client și oferă un răspuns adecvat. Serverele stochează resursele și datele necesare și gestionează logica de afaceri a aplicației. Un server poate servi mai mulți clienți simultan.

Mecanisme de comunicare

Protocolul HTTP (Hypertext Transfer Protocol) este unul dintre cele mai utilizate protocoale de comunicare în arhitectura client-server, în special pentru aplicațiile web. HTTP definește cum trebuie să fie formatate cererile (requests) și răspunsurile (responses) între client și server.

Cererea HTTP

O cerere HTTP tipică include:

  • Metoda de cerere (GET, POST, PUT, DELETE etc.), care indică acțiunea dorită de client.
  • URI (Uniform Resource Identifier), care specifică resursa solicitată.
  • Header-uri care conțin informații adiționale despre cerere sau client.
  • Corpul cererii (body), folosit pentru a trimite date, de exemplu, în cererile POST.
Răspunsul HTTP

Răspunsul HTTP include:

  • Cod de status (ex. 200 pentru succes, 404 pentru resursă negăsită).
  • Header-uri cu informații despre răspuns sau server.
  • Corpul răspunsului, care conține datele returnate clientului (ex. un fișier HTML sau JSON).

Request-response cycle

Mecanismul de bază în arhitectura client-server este Request-response cycle.

  • Clientul inițiază o cerere către server, specificând ce resurse sau acțiuni sunt necesare.
  • Serverul prelucrează cererea și răspunde clientului cu datele solicitate sau cu un mesaj de eroare, dacă cererea nu poate fi îndeplinită.

Acest proces permite interacțiunea continuă între client și server, fiecare cerere fiind procesată independent.

Set-up

1. Pentru a începe, asigurați-vă că aveți instalat Python.

2. Verificați instalarea rulând comanda în terminal: python –version.

3. Descarcati scheletul de cod de aici.

Dacă aveți mai multe versiuni de Python instalate, selectați versiunea dorită astfel: py -3 (3.x) sau python3 (pe Linux), respectiv versiunea de package manager: py -3 -m pip sau pip3 (pe Linux)

Pentru a instala dependențe folosim package manager-ul pip:

pip install flask flask-sqlalchemy

Pentru a instala dependențele specificate într-un fișier folosim flag-ul -r:

py -3 -m pip install -r requirements.txt

py -3 app.py

Alternativă pentru Linux:

pip install -r requirements.txt

pip3 install -r requirements.txt

python app.py

python3 app.py

4. Deschideti proiectul folosind IDE-ul preferat, de exemplu Visual Studio Code cu extensia Python sau un IDE specializat pentru Python, precum PyCharm și rulați comanda pentru instalarea dependențelor din fișierul requirements.txt.

Flask-SQLAlchemy este o extensie a framework-ului Flask care facilitează lucrul cu baze de date relaționale în aplicațiile Python.

Vom folosi Flask-SQLAlchemy pentru a crea o bază de date SQLite (pentru simplitate), fără a fi necesară configurarea unui server SQL dedicat.

5. Dupa finalizarea primului TO DO pentru testare descarcati postman de aici.

De obicei, cererile de tip GET nu conțin date în body și se parametrizează astfel:

Exemplu cereri GET cu parametru în URL:

http://localhost:5000/login?username=alex&password=1234

@app.route('/login', methods=['GET'])
def login():
    username = request.args.get('username')
    print(username)
    password = request.args.get('password')
    print(password)
    return jsonify({"status": True})

Task

Completati TO DO-urile din scheletul de cod, acestea sunt self explanatory. Scopul acestora este sa intelegeti cum sa interactionati cu o baza de date prin intermediul unui server. Prin aceste metode numite endpoint-uri puteti realiza comunicarea dintre client si server.

Urmăriți comentariile din schelet și tutorialul Flask-SQLAlchemy Quick Start pentru a implementa operațiile cu baza de date necesare pentru implementarea funcționalităților de lucru cu datele. Alternativ, folosiți direct biblioteca sqlite3 (vezi exemple în scheletul de cod) pentru a interoga baza de date folosind sintaxă SQL.

Testare

Testati fiecare endpoint in parte, verificati ca functioneaza corect. Mai jos este descris un test case pe care sa-l abordati, iar de la acesta puteti sa realiza propriile voastre test case-uri.

Test Case: am adaugat 3 task-uri folosind endpoint-ul de adaugat task-uri, iar cand apelez endpoint-ul prin care obtin o lista cu task-uri acesta returneaza cele 3 task-uri adaugate anterior.

Verificați funcționarea aplicației folosind următoarele metode:

Testarea endpoint-urilor cu Postman

1. Pentru a gasi portul pe care API-ul vostru ruleaza inspectati consola.

2. Pentru a adauga calea verificati adnotarea fiecarui endpoint (@app.route(”/task/cale”)).

3. Verificati tipul metodei (POST/ GET/ etc.)

Explorarea bazei de date cu SQLite Browser

Instalați DB Browser for SQLite (versiunea portabilă). Acesta vă permite să accesați o bază de date SQLite folosind un editor vizual. Verificați conținutul bazei de date: deschideți din editor fișierul tasks.db din folder-ul instance

Testarea end-to-end cu aplicația web client

Rulați aplicația client din folder-ul frontend prin deschiderea fișierului index.html cu un browser. Verificați funcționarea sistemului integrat client-server. Examinați codul aplicației, identificați modul în care se transmit cererile HTTP și cum se realizează interfața cu utilizatorul.

isi/laboratoare/06.txt · Last modified: 2024/11/11 11:43 by alexandru.predescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0