Rest und Vererbung

Peter P.

Cadet 3rd Year
Registriert
Mai 2017
Beiträge
32
Hi,

ich habe serverseitig eine gewöhnliche Vererbungshierarchie. Exemplarisch kann man sich wohl am besten wie einen großen Artikelbaum vorstellen. Als Root z.B. die Klasse Artikel, davon erbt dann Fahrzeug, und von Fahrzeug z.B Boot. usw.

Ich bin mir jetzt nicht sicher wie die Repräsentationen aussehen bzw. wie ich diese am besten Abfrage.

Klar kann ich über eine generische URL einen konkreten Artikel aufrufen z.B.

https://localhost:8080/article/4711

führt jedoch dazu das der Client nicht weiß welcher konkrete Artikeltyp kommt, steckt hinter der id 4711 jetzt ein Boot, oder doch eine Fritteuse? Der Client sollte die kommende Repräsentation ja auf irgendein Objekttyp mappen.

Wenn ich es anders angehe und für jeden Artikeltyp einen eigene URL anbiete z.B

https//localhost:808/boot/1337

Dann weiß ich natürlich was für ein Artikeltyp kommt. Aber ich muss halt Webservices für jeden Artikeltyp anbiete, was bei einem recht Umfangreichen Artikeltypbaum total ausufernd wird.

Was wäre hier der richtige Ansatz?
 
Kannst du den Typen nicht einfach mit in die Datenbank zu den Artikeln klatschen? Geht ja über ne Tabelle und dann per 1:n Beziehung Fremdschlüssel. Dann eben danach aufbauen was die DB zurückgibt.

Quasi sowas:
1Auto
2Boot
3Hubschrauber

Und bei den Artikeln steht dann eben immer nur 1-n drin als Fremdschlüssel mit Verknüpfung auf die andere Tabelle.
 
warum muss der client anhand der url erkennen, um was für einen artikel es sich handelt? das sollte dann doch in den daten stehen wenn ein request gemacht wird? also z.b. ein get auf https://localhost:8080/article/4711 gibt sowas zurück:

JSON:
{
  "type": "boot",
  "viele": {
      "andere": {
          "daten": []
    }
}
 
Die Artikel unterscheiden sich ja in den Eigenschaften.

Code:
{
"type" : "Friteuse"
"hersteller" : "xxx"
"volumen" : 4
"verbrauch"
}

bzw.

{
"type" : "Katze"
"alter" :  4711
"name" : "Betty the Cat"
}

da macht es doch einen Unterschied ob ich den Artikel clientseitig auf eine Katze oder eine Friseuse mappe. Daher ist es für den Client doch sicher wichtig was für ein Object sich hinterm Artikel verbirgt.
 
was hindert dich daran, abhängig von "type" die entsprechenden daten auszulesen? wenn "type" den wert "katze" hat, dann will ich ja kein "volumen" auslesen. das gleiche würdest du doch auch machen wenn "type" in der url kodiert wäre: bei https//localhost:808/boot/1337 würdest du doch auch nicht versuchen, das als auto zu behandeln.
 
Manachmal denkt man sooooo lange über eine Lösung nach das man die einfachsten Dinge nicht mehr auf dem Schirm hat....

Gleich wie wenn man bei der schreibweise eines Wortes unsicher ist, es so lange anstarrt, dass man am Schluss die bloße existenz des Wortes anzweifelt!!!

ich danke Euch
 
0x8100 schrieb:
was hindert dich daran, abhängig von "type" die entsprechenden daten auszulesen? wenn "type" den wert "katze" hat, dann will ich ja kein "volumen" auslesen. das gleiche würdest du doch auch machen wenn "type" in der url kodiert wäre: bei https//localhost:808/boot/1337 würdest du doch auch nicht versuchen, das als auto zu behandeln.
Haette ich auch empfohlen.
Entweder im Typescript das Objekt auf eine bestimmte Klasse casten, oder eine View erzeugen, die sagt, dass eine Klasse erwartet ist.

Alternativ kannst du auch alle Felder anzeigen, unabhaengig daovn ob sie belegt sind und die leeren rausfiltern.
Oder eine Liste von Key-Value-Pairs anbieten.
 
Zurück
Oben