Architekurfrage

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Architekurfrage

      Hallo zusammen,

      ich bin gerade im Begriff, meine erste App mit Serveranbindung zu programmieren, dabei möchte ich u.a. auf einem Server (im Moment auf einem lokaler Server) verschiedene XML-Dokumente im weitesten Sinne speichern. Idealerweise sollten diese dann auf dem Server direkt in einer entsprechenden Ordnerstruktur sortiert vorliegen, oder aber zumindest einfach beispielsweise aus einer Datenbank auslesbar sein.

      Aktuell weiß ich nicht genau, nach was ich suchen sollte und hätte daher gern mal eine Eischätzung von Euch: Eignet sich beispielsweise eine SQLite-Datenbank für diese Fälle, für die es sicherlich entsprechende Admin-Tools gibt (ähnlich zu phpMyAdmin), oder sollte ich wirklich direkt die Datei speichern? Und falls dann doch eher letzteres: Wie lässt sich da das Zusammenspiel aus Client und Server (was brauch ich an Webservices, ...) am sinnvollsten realisieren? Wie gesagt: Mir fehlt aktuell vor allem der große Überblick über die Realisierung, sodass ich einfach auch nicht weiß, wonach ich zu suchen habe...

      Vielen Dank schonmal für eure Hilfe,
      Peak.
    • Du wirbelst da glaube ich mächtig was durcheinander. Du hast die Daten als XML in einer Ordenerstruktur auf dem Webserver - dann lade sie doch einfach runter.

      Oder hast du die Daten auf dem Server in einer Datenbank - was hat da SQLite verloren?

      Im Normalfall hast du einen Webservice der die Daten bereit stellt. Dahinter steckt meist eine Datenbank. Auf dem Server implementierst du dann die Services z.B. über REST/JSON. Das iPhone holt die Daten ab.
      Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.
    • Hehe, auch wenn ich mit Sicherheit einiges durcheinander wirbele, gaaaaaaaaaaanz so unklar ists mir dann nicht. Ich hole also nochmal aus:

      In meiner App bearbeite ich XMLs. Die können direkt dort erzeugt worden sein, ggf. stammen sie auch vom Server, aber dasd lassen wir erstmal außen vor, alles ja kein Drama. Mich interessiert nun die andere Richtung: Wie speichere ich diese XMLs dann am sinnigsten auf dem Server ab? Nebenbedingung soll sein, dass ich dort quasi die originalen XML-Files relativ einfach wieder herstellen kann. Im einfachsten Fall liegen sie also direkt auf dem Server im Ordner XY (was eine wie auch immer geartete Lösung eines Webservices erforderte, der Dateien entgegennehmen kann), im aus diesem (!) Gesichtspunkt sicherlich etwas komplizierteren Fall könnte ich mir die Inhalte der XML-Files auch in einer Datenbank abgespeichert vorstellen.

      Ich kann nun einfach nicht einschätzen, was die sauberere, und was vllt die einfachste Lösung dafür wäre.

      @Amin: Wenn ich REST jetzt in der Kürze richtig verstehe, verwendet es das POST aus http, korrekt? Was muss an dieser Stelle aber grundsätzlich serverseitig implementiert sein? Und: Warum ist das genau empfehlenswert, ist es einfach umzusetzen (ist es aber ggf. dafür auch nicht mehr Stand der Dinge, ...)...?

      Ich schätze, es sind eher dumme Fragen, die ich stelle, aber wie gesagt fehlt mir einfach ein wenig der Überblick, wo anzusetzen ist.
    • Na ja, dir fehlen einfach ein paar entscheidende Grundlagen, mehr nicht.

      Zunächst sind diese XML Files nicht auf dem Server gespeichert. Sie werden aus Datenbankabfragen erzeugt. Dazu braucht man Serverseitig eine Programmiersprache. Und genau mit so einem Programm musst du http Posts entgegen nehmen und die Daten in einer Datenbank speichern.

      Also wenn du nen Webservice implementieren möchtest, solltest du dich mal Grundsätzlich ein wenig mit Webentwicklung auseinander setzten. PHP und mySQL ist ein Gespann, das man an jeder Ecke bekommt. Oder Ruby oder Java oder Python...
      Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.
    • Manfred Kreß schrieb:

      Oder hast du die Daten auf dem Server in einer Datenbank - was hat da SQLite verloren?
      Ähm … was genau ist SQLite, wenn nicht eine Datenbank? ;)
      Es ist vollkommen legitim, SQLite online einzusetzen; z.B. bei PHP ist eine SQLite-Extension an Bord, so dass Du nichts außer dem PHP-Interpreter brauchst.

      Carsten
    • PeakTech schrieb:

      Im einfachsten Fall liegen sie also direkt auf dem Server im Ordner XY (was eine wie auch immer geartete Lösung eines Webservices erforderte, der Dateien entgegennehmen kann), im aus diesem (!) Gesichtspunkt sicherlich etwas komplizierteren Fall könnte ich mir die Inhalte der XML-Files auch in einer Datenbank abgespeichert vorstellen.
      IMHO solltest Du bei der Frage Dateisystem vs. Datenbank nicht vom Transportweg ausgehen, sondern von dem, was Du machen willst. Musst Du die Dateien nur verwalten? Musst Du XPath-Abfragen darauf ausführen, xmllint verwenden oder anderweitig validieren, …? Wie sieht die Zugriffskontrolle aus bzw. welche Möglichkeiten, den Daumen draufzuhalten hast Du im einen oder anderen Fall?
      Wenn es keinen Grund gibt, den Kram in eine Datenbank zu stecken, würde ich in jedem Fall das Dateisystem vorziehen. Und dazu brauchst Du keinen Webservice, sondern es gibt auch andere Wege, so etwa WebDAV.

      PeakTech schrieb:

      @Amin: Wenn ich REST jetzt in der Kürze richtig verstehe, verwendet es das POST aus http, korrekt?
      Der Witz bei REST ist, dass die HTTP-Methode sagt, wo der Hase langzulaufen hat. Beim Hochladen wäre die Methode entweder POST (Aktualisieren des Dokuments oder Anlegen mit serverseitig erzeugter ID) oder PUT (Anlegen mit clientseitig erzeugter ID). Du musst aber nicht REST nehmen, sondern kannst genausogut die Daten per normalem POST-Request-Body auf den Server schieben.

      Carsten
    • Manfred Kreß schrieb:

      Also wenn du nen Webservice implementieren möchtest, solltest du dich mal Grundsätzlich ein wenig mit Webentwicklung auseinander setzten. PHP und mySQL ist ein Gespann, das man an jeder Ecke bekommt. Oder Ruby oder Java oder Python...


      Hi, mit PHP und mySQL habe ich tatsächlich vor einiger Zeit mal was gemacht, so auf dem Niveau von Gästebüchern und einfachen "Foren". Da sind mir auch durchaus die Zusammenhänge einigermaßen klar, nur wie könnte mir PHP an dieser Stelle weiterhelfen? Ich brauche ja den Zwischenschritt einer GUI an dieser Stelle nicht, und das ist doch im Prinzip die Hauptaufgabe von PHP, das Ausliefern dynamisch generierter Inhalte..?

      BlueM schrieb:

      IMHO solltest Du bei der Frage Dateisystem vs. Datenbank nicht vom Transportweg ausgehen, sondern von dem, was Du machen willst. Musst Du die Dateien nur verwalten? Musst Du XPath-Abfragen darauf ausführen, xmllint verwenden oder anderweitig validieren, …? Wie sieht die Zugriffskontrolle aus bzw. welche Möglichkeiten, den Daumen draufzuhalten hast Du im einen oder anderen Fall?
      Wenn es keinen Grund gibt, den Kram in eine Datenbank zu stecken, würde ich in jedem Fall das Dateisystem vorziehen.


      Okay... Naja, im ersten Schritt werde ich das in jedem Fall möglichst einfach halten. Validierung und Zugriffskontrolle brauche ich erstmal nicht. Wichtiger wäre wiegesagt, dass ich EINFACH an die XMLs auf dem Server komme. Auch wenn mir der Unterschied zwischen http-POST und REST nicht ganz klar ist, würde ich es also meine Möglichkeiten mal so zusammenfassen:

      1.: Speichern in einer Datenbank --> Zwar wahrscheinlich eine "saubere" Lösung, schnell aber overkill, und vor allem komme ich nur über Umwege wieder an die Dateien
      2.: Speichern der Files: Einfachster Weg, dafür Prüfmechanismen u.ä. bei Bedarf schwerer nachzuimplementieren.
      3.: Übergeben der Files an einen Webservice, der z.B. validiert, ... und speichert. Vermutlich der komplexeste Weg.

      Soweit halbwegs korrekte Einschätzung?
    • PeakTech schrieb:

      Ich brauche ja den Zwischenschritt einer GUI an dieser Stelle nicht, und das ist doch im Prinzip die Hauptaufgabe von PHP, das Ausliefern dynamisch generierter Inhalte..?
      Warum nur das Ausliefern? Wenn Du mal ein Forum geschrieben hast, wirst Du da POST-Daten aus einem Formular entgegengenommen haben; nichts anderes ist es (serverseitig), wenn Du aus Cocoa heraus POST-Daten sendest. PHP (genauso Python, Ruby, ein CGI in C oder Perl etc.) kann die Daten entgegennehmen und speichern und kann sie auch (mit allen im Einzelfall sinnvollen Details hinsichtlich z.B. Zugriffskontrolle, Caching-Headern etc.) wieder ausliefern.

      BlueM schrieb:

      Wichtiger wäre wiegesagt, dass ich EINFACH an die XMLs auf dem Server komme.
      Das spräche doch stark für eine Speicherung im Dateisystem. Einfacher wird’s nicht.

      BlueM schrieb:

      Auch wenn mir der Unterschied zwischen http-POST und REST nicht ganz klar ist, würde ich es also meine Möglichkeiten mal so zusammenfassen:

      1.: Speichern in einer Datenbank --> Zwar wahrscheinlich eine "saubere" Lösung, schnell aber overkill, und vor allem komme ich nur über Umwege wieder an die Dateien
      2.: Speichern der Files: Einfachster Weg, dafür Prüfmechanismen u.ä. bei Bedarf schwerer nachzuimplementieren.
      3.: Übergeben der Files an einen Webservice, der z.B. validiert, ... und speichert. Vermutlich der komplexeste Weg.
      Zu 1.: Es ist keineswegs Overkill, aber wenn Du keinen Bedarf für eine Datenbank hast, gibt es keinen Grund, das so zu machen.
      2. Da ist nichts Schwieriges dran, selbst, wenn man kein PHP-Crack ist.
      3. Wieso übergeben an einen Webservice? Was für ein Service und wofür? Validieren kannst Du auch mit 2., und ohne Speichern wirst Du eh nicht weit kommen ;)

      Carsten
    • Morgen!

      Danke für deine ausführliche Erklärungen! Dann werde ich mich mal in die Vorgehensweise gemäß 2. tiefer reinlesen. Nur um schonmal den Überblick zu bekommen: Es ist ja offensichtlich so, dass ich nun per POST dem Server eine Datei zum Speichern schicke. Der versucht das und informiert mich über Erfolg / Misserfolg. Wie arbeitet er das aber genau ab (in meinem Beispiel ists ein Apache-Server) und vor allem, wie lässt sich an dieser Stelle ggf. noch "zwischenhängen" (sprich zB die Datei einem Skript zum Validieren übergeben) und wie kann ich damit auch ggf. die Antwort des Servers beeinflussen?

      Viele Grüße,
      Peak