Erzählen Sie uns vom Prinzip HATEOAS.
sobes.tech KI
Antwort von AI
HATEOAS (Hypermedia als Motor des Anwendungszustands) ist ein zentrales Prinzip von RESTful-Diensten. Es besagt, dass der Client nur über hypermediale Links zwischen den Zuständen der Anwendung navigieren soll, die vom Server in den Antworten bereitgestellt werden. Dies macht die API selbstentdeckend und weniger fest an spezifische URLs gebunden, was ihre Flexibilität und Skalierbarkeit erhöht.
Stellen wir uns vor, wir erhalten Informationen zu einer Bestellung. Ohne HATEOAS könnte die Antwort so aussehen:
{
"order_id": 123,
"status": "pending",
"total": 100.50
}
Um Aktionen mit dieser Bestellung durchzuführen (z.B. Bezahlung oder Stornierung), muss der Client die entsprechenden URLs und HTTP-Methoden vorher kennen.
Mit HATEOAS fügt der Server in die Antwort Links zu den verfügbaren Aktionen ein:
{
"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" }
}
}
Der Client, der diese Antwort erhält, sieht die verfügbaren Aktionen (pay, cancel) und die URLs dazu, ohne vorheriges Wissen über die API-Struktur. Wenn der Server die URL für die Bezahlung ändert, erhält der Client die aktualisierte URL in der Antwort und kann ohne Codeänderung weiterarbeiten.
Vorteile von HATEOAS:
- Flexibilität: Die API ist weniger fest an bestimmte URLs gebunden. Änderungen an der Struktur oder den URLs erfordern keine Neukodierung des Clients.
- Selbsterkundung: Der Client kann die API durch Folgen der Links in den Antworten erkunden.
- API-Entwicklung: Der Server kann neue Links hinzufügen oder alte entfernen, und der Client passt sich an.
Nachteile von HATEOAS:
- Implementierungsaufwand: Der Server muss in jeder Antwort Links generieren und einfügen, was komplexer sein kann.
- Größere Antworten: Die Antworten werden durch die Links größer.
- Client-Komplexität: Die Client-Logik muss angepasst werden, um die Links zu verarbeiten und zu folgen.
Im QA / QA-Automatisierung erfordert das Testen einer HATEOAS-API einen besonderen Ansatz. Anstatt URLs fest im Testcode zu codieren, sollten die Links aus den Antworten extrahiert und für nachfolgende Anfragen verwendet werden. Das macht die Tests widerstandsfähiger gegenüber API-Änderungen. Beispiel in Java mit RestAssured:
// Bestellung abrufen
Response orderResponse = given()
.when()
.get("/api/orders/123")
.then()
.statusCode(200)
.extract().response();
// URL für die Bezahlung aus den hypermedialen Links extrahieren
String payUrl = orderResponse.jsonPath().getString("_links.pay.href");
String payMethod = orderResponse.jsonPath().getString("_links.pay.method");
// Zahlungsanfrage mit den extrahierten Daten durchführen
given()
.when()
.request(payMethod, payUrl) // Anstelle einer festen URL
.then()
.statusCode(200);
HATEOAS ist somit ein wichtiges Prinzip für die Erstellung wirklich RESTful APIs, das die Flexibilität und Benutzerfreundlichkeit erhöht. Für Tester bedeutet das, Teststrategien anzupassen, um mit dynamischen hypermedialen Links zu arbeiten.