Ich habe diese Frage, die eine Weile durch meinen Kopf gegangen ist. Nehmen wir an, wir haben unser Projekt mit Backend und Frontend auf separaten Ebenen strukturiert. Also, vom Frontend, wollen wir einen Kunden erhalten, die auf hal+json
Format kommt:Wie sollte Hateoas vom Frontend aus gehandhabt werden?
GET /customers/1 HTTP/1.1
Accept: application/hal+json
{
"name": "Alice",
"links": [ {
"rel": "self",
"href": "http://localhost:8080/customer/1"
} {
"rel": "transactions",
"href": "http://localhost:8080/customer/1/transactions"
}]
}
Dann vom Frontend ich alle Kundentransaktionen erhalten möge. Meine Frage ist: Wie soll ich die URL bekommen? sollte es von der Antwort sein? oder sollte ich es intern bauen?
Wenn wir mit der ersten Option gehen, denke ich, dass das vielleicht nicht elegant wäre, alle Links zu iterieren, bis wir das bekommen, was wir wollen. Auch könnte die Situation eintreten, in der wir nicht den Link der Anfrage haben, die wir machen wollen.
Wenn wir mit der zweiten Option gehen, ich verstehe nicht, wie diese URL zu bauen, wenn wir nicht tatsächlich die IDs haben. Wie kann ich neue Kundentransaktionen erstellen, wenn hadoas IDs durch Links ersetzt und ich die Objektreferenz nicht mehr im Körper habe?
Ich dachte, dass vielleicht Service sowohl application/hal+json
(orientiert an Benutzer) und application/json
(orientiert an Kunden) unterstützen sollte, aber ich sehe nicht, dass dies ist, wie es im Allgemeinen getan wird.
Was denkst du?
Was im Falle ich die Benutzer-ID haben, die ich möchte eine Behörde hinzufügen? Dann müsste ich eine GET-Anfrage an/users stellen, um den Link der angegebenen Benutzer-Berechtigungen zu erhalten. Das wäre in Ordnung? Ich mache 2 Anfragen statt einer. Vielen Dank für Ihre Antwort! – jscherman
Sie sollten keine ID von einem externen System haben. Du solltest eine URL haben. Und ja, es sind 2 Anfragen ... es sei denn, der Server ist schlau genug, um Ihre Absicht zu kennen. dann könnte es zum Beispiel die Transaktionsbeziehung für Sie einbetten. Eine Möglichkeit, diese Absicht zu geben, besteht darin, den konsumierenden Client mit einer Kopfzeile zu identifizieren. Aber ärgern Sie sich nicht über die 2 Anfragen, es ist ein sehr kleiner Preis zu zahlen. JETZT wenn du intern bist ... warum benutzt du sowieso eine HTTP API? gehen Sie einfach zum DB/System oder nehmen Sie die Daten auf, die Sie benötigen. –
Ich denke, ich habe Ihren Standpunkt verstanden. Vielen Dank! – jscherman