| 

.NET C# Java Javascript Exception

4
Hallo,

ich bin gerade in der Entwurfsphase für ein Dokumentenarchiv und benötige Hilfe bezügl. REST.
Informationen vorab:

Es gibt eine Domain Class:

Document (mit folgenden Properties:)
- documentId
- revision = 1
- deleted = false
- size
- fileExtension
- comment
- fileName

Wenn ich nun neue Dokumente anlegen möchte, muss ich in einem POST Request auf die URL "http://hostname:port/documentarchive/document" ja eigentlich nur den binär teil mitschicken, oder?
Mein Gedanke war eben der: Die Action "save" im Controller "DocumentController" empfängt die Daten, speichert Sie im Dateisystem und legt dann eine neue Entity der DomainClass mit den gesamten Metainformationen (den Porperties der DomainClass) an. So weit so gut.

Das eigentliche Problem sehe ich nun beim rausholen von Informationen / Dokumenten aus dem Archiv.

Ein GET Request soll im selben Controller landen und zwar in der "show" Action (Dank URL Mapping ja kein Problem).

Nehmen wir beispielsweise mal an der Aufruf sieht folgendermaßen aus:

GET http://hostname:port/documentarchive/document/3

Was liefert die Action nun zurück? Die Metainformationen, also die Properties der DomainClass? Oder ist es das Dokument?

Ich bin mir selber noch nicht ganz im klaren wie da gutes REST Design auszusehen hat und hoffe auf ein paar Denkanstöße...

Meine Ansätze waren:

1. Ich gebe über einen Parameter mit an, ob ich die Metadaten (DomainClass Properties), oder das Dokument haben möchte:

- GET http://hostname:port/documentarchive/document/3 -> liefert das Dokument
- GET http://hostname:port/documentarchive/document/3?meta=true -> liefert die Informationen

2. Document auf zwei Domain Klassen aufteilen: Eine für Metainfos, eine für die echten Datei Inhalte.
Das wiederspricht meiner Meinung nach allerdings dem REST Konzept. Ich habe EINE Resource (das Dokument) und möchte dafür auch nur eine Schnittstelle haben. Wenn ich das aufteile, habe ich zwei Schnittstellen für eine "logische" Resource. Das Dokument und Metainformationen gehören meiner Meinung nach ja zusammen.

Ich hoffe ich bekomm´ von euch ein paar Denkanstöße, die mir bei meinem Problem hier weiterhelfen. Erfahrungsberichte, Links, Tips und alles weitere sind natürlich auch sehr gern gesehn :)

Beste Grüße

limepix
11.05.2011
limepix 81 4
1
Ist das ganze für den Privat-Bereich oder soll die Anwendung in einem Unternehmen eingesetzt werden?

Könne der Content nicht auch ein Property von Document sein, zum Beispiel als byte-Array?
carlptr 12.05.2011
1 Antwort
0
Das ist ein kleines Spielprojekt für mich, in dem ich mich mit der Thematik Grails, verschiedene ContentTypes bei Requests und Dateisystemzugriff (Apache Commons Fileupload) beschäftigen möchte.

Den Ansatz hatte ich auch schon, allerdings wird es schwierig, bzw. ich meine mit der Zeit äußerst unperformant, wenn große Dateien (z.B. ISO Images) in einer Datenbank gespeichert werden. Würde es sich nur um kleine Daten handeln (< 4K) - ok! da würde ich mit mir reden lassen, aber einer postgres Datenbank Gigabyte große Felder zuzumuten - ob das so eine gute Idee ist?! ...

Ich hatte mir das eben so vorgestellt, dass es ein Verzeichnis gibt, welches dem Dokumentenarchiv zugeteilt wird (in der Config.groovy eingestellt), pro Tag ein Unterordner angelegt wird und in diesen dann die empfangenen Daten von dem Tag reingespeichert werden.
Nur weil man bei REST von "Resourcen Orientierter Architektur" (ROA) spricht, heisst dass doch nicht zwingend, dass Resourcen auch immer an ein und der selben Stelle liegen?! Ich sehe das so, dass eine Resource eben nach außen hin, also für denjenigen der darauf zugreifen möchte, über eine(!) Schnittstelle (URL) erreichbar sein soll. Das tut sie! (bsp. - GET http://hostname:port/documentarchive/document/3) Dem Client kann das doch herzlich wurst sein, wo sich die einzelnen Daten, oder "Teilinformationen" dieser einen(!) Resource befinden.

Nach wie vor bleibt aber die Frage, wie ich nun mit einem Request am besten beides raus bekomme?
Ich dachte auch schon daran, binär Daten in XML zu verpacken :
<document>
<documentId>3</documentId>
<revision>1</revision>
<size>8234775</size>
<content>
<!-- Hier nun die binär Daten-->
</content>
...
</document>


Allerdings verliere ich dann die Möglichkeit, dass wenn sich zb hinter der Resource http://hostname:port/documentarchive/document/3 eine pdf Datei verbirgt, sich automatisch auch mein pdf Viewer öffnet, wenn ich die URL im Browser eingebe, oder nicht? Dadurch zwinge ich den Client quasi, die Struktur der übergebenen Daten (des XML Formats) zu kennen.

Ich selbst finde die Idee mit dem zusätzlichen Parameter, durch welchen dann die Metainformationen geliefert werden, nach wie vor gar nicht mal so schlecht. Trotzdem - Kritik und Verbesserungsvorschläge sind weiterhin erwünscht! ;)

Gruß

limepix
12.05.2011
limepix 81 4

Stelle deine Web-Frage jetzt!