Hypermedia as the Engine of Application State (HATEOAS) zu Deutsch: Hypermedia als Motor des Anwendungs-Zustands, beschreibt einen Quasi-Standard für REST-Architekturen.
Dabei stellt der Server dem Client, von den angenommen wird, dass er keine weiteren Vorkenntnisse über den Service hat, verwandte Services als Links zur Verfügung.
Der Client kann damit theoretisch on Demand weitere Informationen aus den bereits erhaltenen Daten gewinnen.
...
Damit ein neuer RESTful-Service als Typ zur Auswahl bei der REST-Page auftaucht, muss er das Interface \Brandbox\JoinRestful\Join\Restful\Lib\Service\dieser RestfulServiceInterface implementieren.
Um nun zusätzlich die relevanten Links für HATEOAS bereitzustellen, muss zusätzlich das Interface \Brandbox\JoinRestful\Service\Hateoas\Lib\Service\RestfulServiceHateoasInterface
implementiert werden.
Dieses Interface stellt die Methode getLink bereit, die vom HATEOAS-Service automatisch aufgerufen wird, um den dem Typ entsprechenden Link zu erhalten.
Interface \Brandbox\JoinRestful\Service\Hateoas\Lib\Service\RestfulServiceHateoasInterface
Methode | Signatur | Parameter |
---|---|---|
getLink | public |
function |
getLink(Restful\Lib\Entity\RestPage |
$restPage, |
?int |
$id |
= |
null): |
string; | RestPage, id des zu Grunde liegenden Datensatzes |
Die Standard-Services unter REST-Pages implementieren alle dieses Interface.
Konfiguration auf Anwendungsebene
Damit Links vom HATEOAS-Service gebildet werden können, müssen RestPages REST-Pages über Eltern-Kind-Beziehungen miteinander verknüpft werden.
Beispiel
...
Es existieren
34 REST-Pages
,eine vom Typ Liste
für Artikel
eine vom Typ Karte
für Artikel
eine vom Typ Eltern für Artikelgruppe → Artikel
eine vom Typ Kinder
für Artikel → Artikelvariante
Anforderung: die Ergebnisse aus der Liste sollen pro Datensatz einen Link zur Karte des Datensatzes, den Eltern des Datensatzes
und(Artikelgruppen) sowie den Kindern des Datensatzes
enthalten.(Artikelvarianten) erhalten
Konfiguration: die Verknüpfungskette wird logisch von oben nach unten aufgebaut:
Die REST-
Page vom Typ
Eltern erhält als Kind-Datensatz
die REST-Page vom Typ Liste
Die REST-Page vom Typ Liste erhält als Kind-Datensätze die REST-Page vom Typ Karte und die REST-Page vom Typ Kinder
Schaubild
Drawio | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Eine Beispielresponse könnte wie folgt aussehen:
Codeblock |
---|
{
"shopArticleActive": true,
"shopArticleName": "Visitenkarte allgemein",
"shopArticleSku": "00001",
"meta": {
"id": 1,
"userID": 2,
"userTable": "Administrator",
"createTime": 1531780172,
"changeTime": 1670232447
},
"translations": {
"en_GB": {
"shopArticleName": "Business Card",
"shopArticleSeoDescription": ""
},
"fr_DE": {
"shopArticleDescription": null,
"shopArticleName": null
}
},
"links": [
"\/rest\/v5\/parentsGroupArticle\/1",
"\/rest\/v5\/shopArticleCard\/1",
"\/rest\/v5\/childArticleVariant\/1"
]
} |