Sobes.tech
Middle+

Vertel over het HATEOAS-principe.

sobes.tech AI

Antwoord van AI

HATEOAS (Hypermedia als de Engine van de Applicatiestatus) is een kernprincipe van RESTful-diensten. Het stelt dat de client alleen tussen de toestanden van de applicatie moet navigeren via hypermediale links die door de server in de antwoorden worden verstrekt. Dit maakt de API zelfontdekkend en minder strak gekoppeld aan specifieke URL's, waardoor de flexibiliteit en schaalbaarheid worden verhoogd.

Stel dat we informatie over een bestelling ontvangen. Zonder HATEOAS zou het antwoord er zo uit kunnen zien:

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

Om acties uit te voeren op deze bestelling (zoals betalen of annuleren), moet de client vooraf de juiste URL's en HTTP-methoden kennen.

Met HATEOAS voegt de server in de reactie links toe naar de beschikbare acties:

{
  "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" }
  }
}

Nu, wanneer de client dit antwoord ontvangt, ziet hij de beschikbare acties (pay, cancel) en de bijbehorende URL's, zonder voorafgaande kennis van de API-structuur. Als de server besluit de URL voor betaling te wijzigen, ontvangt de client de bijgewerkte link in het antwoord en kan hij doorgaan zonder codewijzigingen.

Voordelen van HATEOAS:

  • Flexibiliteit: De API wordt minder rigide met betrekking tot specifieke URL's. Wijzigingen in structuur of URL's vereisen geen herprogrammering van de client.
  • Zelfontdekking: De client kan de API verkennen door simpelweg de links in de antwoorden te volgen.
  • Evolutie van de API: De server kan nieuwe functies toevoegen (nieuwe links) of oude verwijderen, en de client kan zich aanpassen.

Nadelen van HATEOAS:

  • Implementatiecomplexiteit: De server moet in elke reactie links genereren en opnemen, wat complexer kan zijn.
  • Grotere antwoorden: De antwoorden worden groter door de toevoeging van hypermediale links.
  • Client-logica: De logica van de client moet worden aangepast om de links te verwerken en te volgen.

In QA / QA-automatisering vereist het testen van een API die HATEOAS gebruikt een speciale aanpak. In plaats van URL's hardcoded in tests te plaatsen, moeten de links uit de antwoorden worden gehaald en gebruikt voor vervolgverzoeken. Dit maakt de tests veerkrachtiger tegen veranderingen in de API. Bijvoorbeeld in Java met RestAssured:

// Bestelling ophalen
Response orderResponse = given()
    .when()
    .get("/api/orders/123")
    .then()
    .statusCode(200)
    .extract().response();

// Haal de betaal URL uit de hypermediale links
String payUrl = orderResponse.jsonPath().getString("_links.pay.href");
String payMethod = orderResponse.jsonPath().getString("_links.pay.method");

// Voer de betaalverzoek uit met de geëxtraheerde gegevens
given()
    .when()
    .request(payMethod, payUrl) // In plaats van vaste URL
    .then()
    .statusCode(200);

Op deze manier is HATEOAS een belangrijk principe voor het creëren van echt RESTful API's, dat de flexibiliteit en gebruiksvriendelijkheid verhoogt. Voor testers betekent dit dat teststrategieën moeten worden aangepast om te werken met dynamische hypermediale links.