Sobes.tech
Middle+

Porozprávajte o princípe HATEOAS.

sobes.tech AI

Odpoveď od AI

HATEOAS (Hypermedia as the Engine of Application State) — kľúčový princíp RESTful služieb. Predpokladá, že klient by mal prechádzať medzi stavmi aplikácie výlučne cez hypermediálne odkazy, ktoré server poskytuje v odpovediach. To robí API samoobjaviteľným a menej striktne viazaným na konkrétne URL, čím zvyšuje jeho flexibilitu a škálovateľnosť.

Predstavme si, že získavame informácie o objednávke. Bez HATEOAS môže odpoveď vyzerať takto:

{
  "order_id": 123,
  "status": "pending",
  "total": 100.50
}

Na vykonanie akcií s touto objednávkou (napríklad platba alebo zrušenie) musí klient poznať príslušné URL a metódy HTTP vopred.

Pri použití HATEOAS server zahrnie do odpovede odkazy na dostupné akcie:

{
  "order_id": 123,
  "status": "pending",
  "total": 100.50,
  "_links": {
    "self": { "href": "/api/orders/123" },
    "pay": { "href": "/api/orders/123/pay", "method": "POST" },
    "cancel": { "href": "/api/orders/123/cancel", "method": "PUT" }
  }
}

Teraz klient, ktorý dostane túto odpoveď, vidí dostupné akcie (pay, cancel) a URL adresy k nim, bez predchádzajúcich znalostí o štruktúre API. Ak server rozhodne zmeniť URL pre platbu, klient dostane aktualizovanú linku v odpovedi a bude môcť pokračovať bez potreby zmeny kódu.

Výhody HATEOAS:

  • Fleksibilita: API sa stáva menej striktne viazané na konkrétne URL. Zmeny v štruktúre alebo URL nevyžadujú prepisovanie klienta.
  • Samootkrivanie: Klient môže skúmať API jednoducho sledovaním odkazov v odpovediach.
  • Evolúcia API: Server môže pridávať nové možnosti (nové odkazy) alebo odstraňovať staré, a klient sa môže prispôsobiť.

Nevýhody HATEOAS:

  • Zložitejšia implementácia: Server musí generovať a vkladať odkazy do každej odpovede, čo môže byť zložitejšie.
  • Väčšie odpovede: Odpovede sa zväčšujú kvôli vkladaniu hypermediálnych odkazov.
  • Zložitosť klienta: Klientska logika musí byť prispôsobená na spracovanie a sledovanie hypermediálnych odkazov.

V QA / QA Automation, testovanie API využívajúceho HATEOAS vyžaduje špeciálny prístup. Namiesto pevného zadávania URL v testoch je potrebné odkazy extrahovať z odpovedí a používať ich pre následné požiadavky. To robí testy odolnejšími voči zmenám v API. Napríklad v automatizovaných testoch v Jave s použitím RestAssured:

// Získanie informácií o objednávke
Response orderResponse = given()
    .when()
    .get("/api/orders/123")
    .then()
    .statusCode(200)
    .extract().response();

// Extrahovanie URL pre platbu z hypermediálnych odkazov
String payUrl = orderResponse.jsonPath().getString("_links.pay.href");
String payMethod = orderResponse.jsonPath().getString("_links.pay.method");

// Vykonanie požiadavky na platbu s extrahovanými údajmi
given()
    .when()
    .request(payMethod, payUrl) // Namiesto pevného URL
    .then()
    .statusCode(200);

Tak, HATEOAS je dôležitým princípom pre tvorbu naozaj RESTful API, zvyšujúcim flexibilitu a použiteľnosť. Pre testerov to znamená nutnosť prispôsobiť stratégie testovania na prácu s dynamickými hypermediálnymi odkazmi.