+-------------------------------+
| HTTP SERVICE "HSDE" PROTOKOLL |
--------------------------------------------------------------------------------------------------------------------------------
ALAPOK

- "HSDE" = "http-status, data & error" kezdőbetűiből összerakva.
  A "http-status" jelzi a kérés sikerességét. 
  A "data" & "error" a válasz json-ben lévő kulcsok.

- A protokoll lehet "HSDE/TMS" is, ha az error objektum TMS szerkezetű.
  "TMS" = "type-message-stack" kezdőbetűiből összerakva.
  Hibás kérés esetén az "error" kulcs TMS szerkezetű, vagyis a válasz json ezt a 3 adatot tartalmazza.

- Ajánlott http-státusz kódok, melyeket a kliensnek érdemes küldeni:

    200: Minden rendben: a kérés rendben volt, művelet végrehajtva.
    400: Hibás kérés: rossz/hiányzó paraméter, nincs jogosultság a kért adatra, ... 
    401: Kliens azonosítás hiba: Nem jó a JWT, session, un/pw azonosító, ...
    500: Service hiba: programhiba, elfogyott a memória, nem elérhető az adatbázis, hibás adatbázis művelet, ... 

- Dokumentáció a http-státuszokról:
  https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses

- Azért szükséges, hogy a válaszban "data" és "error" kulcs mindig szerepeljen (nem lehet csak "data" vagy csak "error"),
  mivel lehetséges olyan eset, hogy "error" esetén is szükség van "data"-ra. 
  Például egy rest service hívásakor a user azonosítója már lejárt, ezért a válasz 400-as státuszú, 
  de a "data" tartalmazza, hogy milyen url-re kell a user-t átirányítani, hogy újra bejelentkezhessen. 

--------------------------------------------------------------------------------------------------------------------------------
HTTP - KÉRÉS

- Kevés adat http-get kérés paramétereiben utazik, de használható http-post is.

- Sok adat http-post kérésben történik, a http-body rész json struktúrát tartalmaz.

- http-put, http-delete, ... nem használható, mert nehezebb tesztelni.
  A http-get egy böngészőből, vagy a curl programmal is könnyen tesztelhető.

--------------------------------------------------------------------------------------------------------------------------------
HTTP - VÁLASZ

- A http-válasz JSON struktúrát ad vissza, ebben a formában:

    {
      data: {...},
      error: {...}
    }

- A "data" és az "error" kulcsoknak szerepelni kell a válaszban, az értékük lehet null, vagy {...}. 

- Ezeken kívül tetszőleges tagokkal is ki lehet egészíteni, ez a struktúra a minimum.

- A http-választ fogadó működése:

  SIKERTELEN HSDE-PROTOKOLL-nak minősül a kommunikáció ha:
  - Exception keletkezik (network error, same origin policy megsértés, connection timeout, ...)
  - Ha a content type nem "application/json".
  - Ha a válasz json nem tartalmaz "data" kulcsot.
  - Ha a válasz json nem tartalmaz "error" kulcsot.
  Ha a fenti felsorolás egyike sem következik be, akkor a PROTOKOLL SIKERES!

  Sikeres protokoll esetén tovább kell vizsgálódni. 
  Előszőr a http-status -t kell megvizsgálni:

    - 200-299 http-státusz esetén:
      Nem kell vizsgálni az "error"-t, csak a "data" releváns.
      Lehetséges, hogy a "data" nem tartalmaz adatot, mert nincs válasz adat.

    - Nem 200-299 http-státusz esetén:
      Az "error"-nak tartalmaznia kell a hiba okát, amiért nem volt sikeres a kérés.

--------------------------------------------------------------------------------------------------------------------------------
AZ "ERROR" OBJEKTUM EGY LEHETSÉGES KIALAKÍTÁSA

- Formátum:

    error: {
      type: "VALIDATION" | "UNEXPECTED",
      message: "hibaüzenet" | [hibaüzenetek] | {...},
      stack: "..."
    }

- type:
  Error típusa, kötelező.
  VALIDATION = A kérés nem volt megfelelő (nincs jog, hiányzó vagy rossz paraméter, ...)
  UNEXPECTED = Valamilyen váratlan hiba (adatbázis hiba, 0-val osztás, programhiba, ...)

- message: 
  Egy vagy több hibaüzenet, vagy összetett hibaobjektum. Kötelező! 
  A preferált megvalósítás: [hibaüzenetek], vagyis hibaüzenetek tömbje.

- stack: 
  A programnyelv által biztosított stack trace.
  UNEXPECTED esetén kötelező.

--------------------------------------------------------------------------------------------------------------------------------