Ich habe eine AngularJS Anwendung mit ui Router zu verwenden, die eine REST API mit Hyper verbraucht. Die allgemeine Idee ist, dass die API die URLs für ihre verschiedenen Aufrufe generiert und den Client daran hindert, die URLs selbst zu erstellen.AngularJS mit Hypermedia (HATEOAS): Wie hypermedia Urls accross Staaten
Wenn zum Beispiel die Liste der Produkte zu holen, ist hier, was die API gibt:
[
{
"id": 1,
"name": "Product A",
"_links": {
"self": {
"href": "http://localhost:4444/api/products/1",
"name": null,
"templated": false
},
"actions": []
}
},
{
"id": 2,
"name": "Product B",
"_links": {
"self": {
"href": "http://localhost:4444/api/products/2",
"name": null,
"templated": false
},
"actions": []
}
}
]
Also, das Problem: Ich eines Produkts zum Detail zu navigieren möchten. Ich habe die API-URL aus der Sammlung Hypermedia verfügbar. Beim Ändern von Zuständen muss ich diese URL jedoch irgendwie an den Detailzustand übergeben, damit der Controller des Detailzustands das Produkt abrufen kann.
Die UI-URLs sind vollständig von den API-URLs entkoppelt, d. H. Der Client hat sein eigenes URL-Schema.
Was ist der beste Weg, um dies zu erreichen, während der Client bleibt staatenlos und jede Seite bookmarkbar?
Eine Lösung besteht darin, die URL ui router
's data
Eigenschaft zu übergeben. Die Seite wäre jedoch nicht bookmarkbar. Eine andere Möglichkeit besteht darin, die API-URL in der UI-URL zu übergeben, wodurch die Seite mit einem Lesezeichen versehen werden kann (solange sich die API-URL nicht ändert), aber die UI-URL wäre sehr hässlich.
Irgendwelche anderen Gedanken?
Wenn ich nicht falsch liege, suche ich nicht nach einer Vorlagenlösung, d. H. Einer Lösung, bei der die API eine Vorlage einer URL zurückgibt, die vom Client mit Parametern injiziert werden muss. Der springende Punkt ist, dass die URL bereits mit Daten gefüllt ist, da einige URLs ein wenig komplizierter sind als das oben angegebene Beispiel.