2016-08-26 1 views
0

Ich habe eine Reihe von normalisierten Tabellen, genannt danger, countermeasure und module. Jetzt habe ich eine dreispaltige Tabelle krt, die die Verbindung zwischen den drei Tabellen darstellt. (Spaltennamen danger_id, countermeasure_id, module_id) Die normalen Endpunkte wie /danger zeigen die Elemente der entsprechenden Tabelle.REST API mit komplexen SQL-Operationen

/krt?where={result: module, danger_id: x} würde die Tabelle krt für alle Gefahren mit danger_id == x abfragen und das Ergebnis mit der Modultabelle verbinden. Das Ergebnis aussehen würde (für die Anzeige umgewandelt)

danger_id: 
- module a 
- module b 
danger_id2: 
- module .. 
[...] 

Ich könnte natürlich einen Blick liefern und einen benutzerdefinierten Endpunkt für diese Ansicht hinzufügen. Aber es gibt nicht nur drei mögliche Ansichten, sondern auch komplexere mit ein oder zwei zusätzlichen Verbindungen. (kann bei Bedarf auch ein Beispiel liefern)

Daher ist diese Art von Abfrage und Beitritt ein gemeinsames Konzept oder verletze ich irgendwelche der REST-Einschränkungen mit diesem Design? Gibt es eine bessere/intuitivere Art, solche Informationen bereitzustellen?

+0

Immer noch auf jemanden mit ein wenig Erfahrung hoffen. Ich denke, es könnte zumindest das Cachability-Prinzip brechen, da das zugrunde liegende Dokument erzeugt und nicht aus der Datenbank geholt wird. Bei jeder Anfrage müsste der Join erneut gemacht werden. – matt3o

Antwort

0

Wenn Sie sich fragen, wie würde die RESTful URL aussehen würde, könnte es so etwas wie

/krt?dangerId=x&result=module

sein, wie Sie die SQL-Abfrage erstellen entscheiden, ist nicht auf RESTful Design meiner Meinung nach zusammen.

Es gibt auch keine Richtlinie, die besagt, dass jede GET-Anfrage cachefähig sein muss - es hängt auch von anderen Faktoren ab. Wenn Ihre Daten relativ statisch sind, aber oft genug angefordert werden, können Sie sie auch nur für kurze Zeit zwischenspeichern.

+0

Der Abfragetyp ist auch nicht wirklich angegeben - ich habe einfach die JSON-Syntax verwendet. Laut [Wikipedia] (https://en.wikipedia.org/wiki/Representational_state_transfer#Architectural_constraints) gibt es 6 Einschränkungen und die Cachability ist eine davon. Ja, ich kann es zwischenspeichern, aber ich kann nicht wirklich überwachen, wenn sich die zugrunde liegenden Daten ändern, da es einfach zu viele Daten und nicht wirklich erträglich ist, besonders wenn viele Leute es gleichzeitig benutzen. Deshalb würde ich es nicht "Caching" nennen. Wahrscheinlich wird es so nie passieren, aber aus diesem Grund wird es keine REST-API sein. – matt3o

+1

"Antworten müssen sich daher implizit oder explizit als cachefähig definieren, ** oder nicht **" - ich würde dies genauso interpretieren, wie Caching anwenden zu können - was Sie technisch sein werden! Denken Sie nicht eine Sekunde lang daran, dass alle GET-Requests einer RESTful-API zwischengespeichert werden - das ist auch eine Geschäftsentscheidung. –

+0

Ich sehe Ihren Punkt - ich kann es zwischenspeichern. Aber nicht im Hinblick darauf, zu wissen, wann sich die zugrundeliegenden Daten ändern, werde ich den Cache aktualisieren, sondern eher in Form eines dummen Cache, der den Zustand z.B. für eine Stunde. Guter Punkt. Abgesehen davon - glauben Sie, dass es mehr oder weniger dem REST-Prinzip entspricht? – matt3o