Closed xdoo closed 6 years ago
Warum auch die keepers?
"keepers": { "href": "http://animad.mocklab.io/keepers" }
Die enclosures haben doch nur eine Relation zu den animals (animalList)?
Die Fachlichkeit ist an dieser Stelle völlig irrelevant.
Sehe ich nicht so. Zur Referenzimplementierung gehört auch, dass nur die Relationen zur Auswahl angezeigt werden die modelliert und generiert wurden.
Mag sein - ich sehe das anders. Das Issue ist neutral formuliert und mit einem fiktiven Beispiel veranschaulicht. Das bekommt @rowe42 schon hin.
Ich muss es aber erstmal verstehen. Und für mein Verständnis wäre schon interessant : in unserem konkreten Beispiel wäre keepers nicht drin, oder?
Ja. Da kommen immer nur die Relationen des Objektes rein.
Am 26.01.2018 17:32 schrieb "rowe42" notifications@github.com:
Ich muss es aber erstmal verstehen. Und für mein Verständnis wäre schon interessant : in unserem konkreten Beispiel wäre keepers nicht drin, oder?
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/xdoo/lhm_animad_admin_html5/issues/129#issuecomment-360834357, or mute the thread https://github.com/notifications/unsubscribe-auth/AArgz1bjz_wKsaLC2jgzLBvpjwO41lIaks5tOf4xgaJpZM4Rt524 .
Fiktive Beispiele wären besser an fiktiven Entitäten und Relationen erklärt. Das hier sorgt - wie zu sehen ist - nur für Verwirrung.
Ich stelle hier mal zur Diskussion, ob die OPTIONS-Methode überhaupt der richtige Weg ist, um Relationen abzufragen. Spring HATEOAS unterstützt per Default diese Methode und liefert dazu die möglichen (erlaubten) HTTP-Operationen für den angegebenen Link.
Beispiel:
OPTIONS http://localhost:39146/animals```
liefert im Header folgende Info über die angefragte URL:
Access-Control-Allow-Methods →POST, PUT, PATCH, GET, OPTIONS, DELETE
... und keinerlei weiteren Content. Mit dieser Anpassung würden wir die grundlegende Semantik dieser Schnittstelle ändern und das Standardverhalten ändern. Ich konnte dazu kein Beispiel finden, gibt es hier Best Practices, dass man mit OPTIONS solche Informationen abrufen soll?
Ich muss zugeben mir kommt das auch seltsam vor. Normaler wäre, nach dem POST einen http 201 created sowie im body das gerade erstellte Objekt inklusive aller links zurück zu geben, oder? Etwas ähnliches steht auch in der spring doku: https://docs.spring.io/spring-data/rest/docs/current/reference/html/#repository-resources.default-status-codes
Also, grundsätzlich kann ich mir schon vorstellen, dass im OPTIONS Request neben den angebotenen HTTP-Verben im Body auch die angebotenen Links kommen. So etwas ähnliches wird auch hier vorgeschlagen: https://github.com/mikekelly/hal_specification/issues/24#issuecomment-71314321 (zweiter Post von Maks3w)
Allerdings bekomme ich es aktuell nicht hin: Der Admin_Service basiert derzeit auf Spring Cloud Brixton.SR7, das basiert auf Spring Boot 1.3.8 und ergibt spring-core-4.2.8. Standardmäßig sind in spring-core <4.3 OPTIONS-Requests deaktiviert. Man muss sie aktivieren, wie hier beschrieben: https://stackoverflow.com/questions/33331042/how-to-handle-http-options-requests-in-spring-boot Allerdings hat keine der Optionen 1-3 bei meinen Versuchen einen spürbaren Effekt gehabt (und Option 4 scheidet aus).
Eine andere Variante besteht darin, einfach auf Spring Core >=4.3 zu wechseln, da sind die OPTIONS standardmäßig aktiviert (habe ich in einem separaten Projekt ausprobiert). Nur habe ich stundenlang versucht, admin_service zu heben, aber bekomme diverse Probleme mit Hibernate und Lucene.
Ich habe in Branch _#129 mal etwas eingecheckt. Wenn man ein DELETE (anstatt eines OPTIONS) auf /enclosures macht, kommen die URLs wie oben gefordert. Wir müssen es also hinbekommen, dass
In dem Branch sind in Klasse MicroServiceApplication auch die Optionen 2 und 3 implementiert. Ihr könnt gerne anschauen, ob ich da was falsch gemacht habe.
Habe das jetzt mal vorerst in Branch _#156 (Pull Request #182) so per Workaround gelöst, dass ich statt OPTIONS hier mal GET aufrufe - da sind die benötigten Links auch drin und die (irrelevante) Payload im Showcase nicht so wahnsinnig groß...
Habe den Workaround nochmal umgebaut - das oben war nämlich der falsche GET-Request. Da ich noch immer darauf warte, dass das Backend nach dem Spring-Upgrade mit OPTIONS-Calls zurecht kommt, habe ich vorerst ins Backend drei neue Requests eingebaut:
Ist mitterweile im master. Auch die entsprechende Verarbeitung im Frontend.
Werde das umbauen, sobald es geht. So lange bleibt das Issue offen.
Ich kann das hier erst dann fixen, wenn das Backend auf die neue Spring-Version hochgezogen ist - also in der Version aus dem Generator.
D.h. erst in KW 13.
Was ich aber bereits ausprobiert habe:
animad-form-behavior.html
und animad-relation-behavior.html
jeweils in Methode _loadOptions
den HACK auskommentieren und die ursprüngliche Zeile (this._loadHalData(saveUrl, 'OPTIONS', 'data');
) einkommentieren.OptionsController.java
die drei enthaltenen Methoden auf RequestMethod.OPTIONS
umgestellt und den value auf "/<entity>"
(also ohne ...Options)Dann kann man zwar die Options unter
OPTIONS http://localhost:8082/api/animad-administration-service/animals
aufrufen.
Das übersteuert aber leider das CrudRepository, so dass
GET http://localhost:8082/api/animad-administration-service/animals
nicht mehr funktioniert... :-(
Habe dies hier nun direkt im Barrakuda gefixt. Ist bereits von @a52team in den Branch polymer-ui2 übernommen worden. Schließe das Issue.
Wenn man ein neues Objekt für eine Entität erstellen will, so hat man keine Kontextinformationen zur Verfügung. Diese bekommt man erst durch einen Request un der entsprechenden Payload. Aktuell gibt es dafür keinen Endpoint. Es wird deshalb im Backend für jeden
ein 'OPTIONS' Endpunkt erstellt werden, der dann Informationen zu den Objektrelationen zurück liefert. Beispiel für folgenden Aufruf:
OPTIONS http://animad.mocklab.io/enclosures
gibt dann folgendes zurück: