Einzelnen Beitrag anzeigen

Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
652 Beiträge
 
Delphi 12 Athens
 
#46

AW: rest server wie muss das post Command aussehen oder welchen Server könnte ich ver

  Alt 22. Okt 2019, 15:37
Diese Server senden einfach Daten via Post Message. In der Post Message kann von Text bis Json enthalten sein.
Der Server soll einfach den Content speichern ... Das ist alles.
Wichtig für den Server ist.. ssl und ipv6/ipv4 muss er können. Zugriff nur über freigegebene IP.
Okay, mein Ansatz wäre folgender:

Starte ein neues Projekt in Delphi: Datei->Neu->Weitere->WebBroker->Web Server Anwendung.
In dem folgenden Assistenten kannst du auch wählen, ob du das Ding als eigenständigen Server haben willst oder als IIS-Anhängsel. Für den Start am einfachsten: ein eigenständiger Server ("GUI-Einzelanwendung"). Dann kannst du auch noch im Assistenten auswählen, ob er dir HTTPS vorbereiten soll. IPv6 hat bei mir noch nie Probleme gemacht.

So, dann bekommst du von Delphi zwei Units erzeugt. Eine ist die GUI, mit der du den Server starten und stoppen kannst. Das andere ist das WebModul, mit dem du die eigentlichen Aktionen durchführen kannst, also die Antworten generieren kannst, die du an einen Client senden willst. Da funken dir dann (fast) keine Automatismen mehr dazwischen und du kannst genau kontrollieren, was hier passiert.

Bei dir ist es ja sehr einfach, weil du eigentlich nur eine Aktion brauchst, nämlich die Default-Aktion und die ist sogar schon da. Wechsel also im WebModul in die Code-Ansicht, dort findest du dann:

Delphi-Quellcode:
procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  Response.Content :=
    '<html>' +
    '<head><title>Webserver-Anwendung</title></head>' +
    '<body>Webserver-Anwendung</body>' +
    '</html>';
end;
Hier kannst du jetzt machen, was du eigentlich willst, also etwa:

Delphi-Quellcode:
procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  if Request.MethodType=mtPost then begin
    SaveDataToFile(Request.Content);
    Response.Content:='Heureka! Data Saved!';
    Response.ContentType:='text/plain';
  end else begin
    Response.Content:='ich antworte nur auf POST!';
    Response.ContentType:='text/plain';
  end;
  Response.StatusCode:=200;
  Handled:=true;
end;
Dss war es auch schon. Nur das "SaveDataToFile" gibt es hier nicht, ist sozusagen eine Platzhalter für deine dann noch zu bastelnde Methode, damit du die Daten auch speichern kannst. Achtung: das müsstest du ggf. mit kritischen Abschnitten sichern, wenn du alle Daten in die selbe Datei schreibst, weil ja sonst zwei Threads zugleich in die Datei schreiben wollen.

Geändert von Bbommel (22. Okt 2019 um 15:56 Uhr) Grund: Soll keiner sagen können, ich hätte ein Semikolon vergessen...
  Mit Zitat antworten Zitat