WEB APP

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
rothy2022
Beiträge: 4
Registriert: Di 19. Apr 2022, 16:38

WEB APP

Beitrag von rothy2022 »

Moin,

eine Anfängerfrage: ich nutze Lazarus für eine Anwendung mit einer DB im Hintergrund, für den mobilen Bereich mache ich alles zusätzlich manuell (HTML-PHP-Ajax), allerdings im beschränkten Funktionsumfang.

Jetzt stehe ich vor der Frage ganz auf WEB APP umsteigen oder so weiter machen.
Kann ich mit Lazarus eine WEB APP erstellen, gibt es da passende Tools oder muss ich mich von der Idee verabschieden und ggfs. in Richtung Visual Studio (Razor) abwandern?

Grüße

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2641
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: WEB APP

Beitrag von m.fuchs »

Grundsätzlich ist die Antwort: ja. Mache ich zum Beispiel auch, deswegen hier die Antworten aus meiner Sicht. Es gibt auch noch weitere Möglichkeiten.

Für deine drei Teilbereiche (HTML-PHP-Ajax) ist die ausführlichere Antwort:

HTML - das schreibe ich weiter von Hand und benutze ein selbstgeschriebenes Template-System um die Daten hineinzuladen.
(Da gibt auch noch anderes: https://wiki.freepascal.org/Template_Engines)

PHP - das ist komplette durch Freepascal-Code ersetzt, ich benutze dazu fcl-web. Teils als Apache-Module, teils als FCGI-Anwendung die von Lighttpd angesteuert wird.

Ajax - mache ich händisch - unter Nutzung von jQuery. (Hier gibt es sogar die Möglichkeit den Pascal-zu-Javascript-Transpiler zu nutzen - dann kann man auch das in Pascal abbilden).

Abgesehen von dieser / meiner Vorgehensweise gibt es noch einige andere Wege und Frameworks. Ein guter Einstieg ist im Portal für Web Development.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Warf
Beiträge: 1913
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: WEB APP

Beitrag von Warf »

Ich hab in der Vergangenheit schon ein paar Webanwendungen mit verschiedenen Techstacks inklusive Pascal geschrieben. Zunächst einmal vorab, es gibt keine "Harten" Limits für Pascal, du kannst also feucht fröhlich alle Webanwendungen mit Pascal schreiben und wirst Eventuell an dein Ziel kommen.
Ob es wirklich Sinn macht ist eine andere Frage, und kommt ganz auf die Situation an.

Schaut man sich z.B. Backend Entwicklung an, grade im Vergleich zu PHP, kommt es ganz auf die Seite an. Viele Seiten sind oftmals reine Visualisierungstools, hierbei wird bei einem Aufruf die Daten z.B. ein Artikel aus der Datenbank geladen, Serverseitig aufbereitet und an den Clienten gesendet, der oftmals wenig zusätzliche Arbeit tun muss um diese Daten Darzustellen (im einfachsten Fall wird gar kein JavaScript überhaupt benötigt, da es sich um pures HTML handelt). Zusammengefasst also "one-shot" interaktionen wobei der State komplett auf Serverseite gemanaged wird.
Das kann man in Pascal machen, ist aber verhältnismäßig viel Aufwand, grade im Vergleich zu PHP. PHP wurde genau dafür Entwickelt. Klar hat Pascal Templating engines mit denen man mehr oder weniger gut HTML Seiten generieren kann, aber PHP ist auf Sprachlevel von Grund auf als Templating Engine entwickelt. Außerdem ist PHP mit seinen ganzen Standarbibliotheken und co auf one-shot HTTP Request handling ausgelegt.
Aus meiner Erfahrung brauchst du hier mit Pascal bestimmt 3-5 mal so viel Entwicklungszeit wie mit PHP, und auch wenn ich die PHP Syntax wirklich nicht mag, so viel mehr Zeitwaufwand ist es mir persönlich nicht Wert.

Eine ganz andere Geschichte ist wenn du Serverseitig state Parallel handhaben musst, du also keine one-shot request-response hast. Beispiel, ich hatte mal ein Webinterface für eine Server Software geschrieben, die Server Software wurde intern dabei über Telnet gesteuert. Zwar kann man in der Theorie mit PHP Telnet ansteuern, aber hier sind Native Sprachen wie Pascal mit Zugriff zur POSIX API und Berkley Sockets natürlich doch deutlich angenehmer. Gleichzeitig brauchte ich hintergrundanwendungen die den Server monitoren, und mit dem Webserver Kommunizieren mussten. Das geht zwar über Umwege alles mit PHP, aber PHP ist eigentlich nicht Dafür ausgelegt. Im Gegenteil, aus Sicherheitsgründen will PHP so isoliert wie möglich sein.
In Pascal hingegen konnte ich einfach einen Webserver starten, der im Hintergrund dann den Monitoring Thread und einen Telnet Thread gestartet hat, die dann mit Message Queues untereinander reden konnten.

Zum Thema Frontend ist es eine etwas andere Geschichte, hier gibt es im Grunde WebAssembly compiler und den Pas2JS transpiler.
Pas2JS ist nett, aber meines Erachtens nach es nicht wirklich Wert zu benutzen. Das Problem ist das Pas2JS nur eine extrem dünne und unvollständige Abstraktionsebene bildet.
D.h. du benutzt zwar Syntaktisch Pascal, alle Technologien, APIs, etc. sind aber JavaScript. Du schreibst effektiv also immernoch JavaScript, und die ganzen Dokumentationen für die APIs (insbesondere was noch nicht von Pas2JS in der System Unit gecovered ist), ist alles in JavaScript, und im Grunde besteht ein nicht unerheblicher Teil des Entwicklungsaufwandes darin JavaScript codebeispiele aus dem Web zu lesen und nach Pascal zu übersetzen.
Gleichzeitig ist viel im Web auf JavaScript ausgelegt. Das DOM besteht aus Dynamischen Datenstrukturen die sich wie JavaScript Objekte verhalten, und JavaScript Objekte sind im Grunde nix anderes als Dictionaries + Lambdas. Es ist also von Vorn bis Hinten auf das Dynamische Typ und Objektsystem von JavaScript ausgelegt. Daher wird jede Sprache die das nicht hat, wie z.B. Pascal das ein rein Statisches Typ und Objektsystem hat, immer mit Hacks, Umständlichen Workarounds und Mehraufwand verbunden sein.
Ganz davon abgesehen das das Bauen und Debuggen der Pas2JS Anwendungen auch noch mit mehraufwand verbunden ist, während du JavaScript einfach direkt über einen <script> tag benutzen kannst ohne irgendwas zu Kompilieren oder Tooling einrichten zu müssen.

JavaScript ist besser im JavaScript sein als Pascal. Daher ist Pas2JS zwar aus einer Akademischen Sicht ganz nett, und wenn die Abstraktionsebene ein bisschen höher ist, sodass man nicht mehr über die Browser APIs und den rest der JS Welt nachdenknen muss, bestimmt auch sehr gut, bis dahin ist es aber einfach nur JavaScript Entwicklung mit extra Schritten.

Und WebAssembly ist zwar auch sehr interessant, WebAssembly ist aber vollständlig isoliert und kann nicht mit den Browser APIs oder dem DOM interagieren. Um also irgendwas mit WebAssembly zu machen brauchst du vermutlich die selbe menge, wenn nicht mehr JavaScript Code als Brücke zwischen den WASM Modulen und dem Browser. Ist also auch keine Lösung für das Webdev Problem.

PS: Was du dir mal anschauen könntest ist HTMX: https://htmx.org/
Das übernimmt den ganzen AJAX Kram ohne das du JavaScript code Schreiben musst. Beispiel wenn du einen Button haben willst der Ergebnisse in einem Feld anzeigt:

Code: Alles auswählen

<div id="results">
</div>
...
<button class='btn' hx-get="/getresults"
  hx-target="#results"
  hx-swap="innerHTML">
    Get Results
</button>
Beim Klick auf diesen Button wird /getresults per AJAX request aufgerufen und der Inhalt in das div mit ID "results" geschrieben.

Dann brauchst du nur noch ein Backend z.B. als fcl-web Anwendung oder in PHP, und brauchst im forntend kein JS code mehr (HTMX ist eine JavaScript library, geht also nicht bei deaktiviertem JavaScript, man muss nur keinen JS code mehr selbst schreiben)

hum4n0id3
Beiträge: 301
Registriert: So 5. Mai 2019, 15:23

Re: WEB APP

Beitrag von hum4n0id3 »

Warf hat geschrieben:
So 5. Nov 2023, 15:04
Gleichzeitig ist viel im Web auf JavaScript ausgelegt.
Nach 10 Jahren PHP musste ich letztendlich es mir auch selbst eingestehen, das ohne JavaScript heute nichts mehr geht. Ich liebe PHP und würde auch gerne am besten alles darin machen, aber ... mein letztes Projekt das am Ende September quasi beendet ist, war auch die letzte klassische PHP-Anwendung. Alles wurde in PHP gemacht, Datenverarbeitung und dann per Mustache-Template-Engine an die Clients geschickt. Frontend im Web gehört einfach JavaScript, jQuery ist ein überbleibsel aus dem letzten Jahrzehnten. Ich mache es seit letzter Zeit so das ich Backend und Frontend trenne. Über RestAPI übergebe ich die Daten dann an das Frontend, das ich mit React baue.

rothy2022
Beiträge: 4
Registriert: Di 19. Apr 2022, 16:38

Re: WEB APP

Beitrag von rothy2022 »

Danke soweit, jetzt mache ich mir mal Gedanken ;-)

Peter.Kainz
Beiträge: 2
Registriert: So 26. Nov 2023, 18:10

Re: WEB APP

Beitrag von Peter.Kainz »

hi,

versuche mal xProject (https://green-hill.srl),

der Kompiler nimmt den source code und die GUI Einstellungen und generiert daraus eine Web Anwendung die genauso aussieht und funktioniert wie das ursprüngliche Programm, das Ergebnis besteht ausschließlich aus html, css und javascript.

grüße
peter

Mathias
Beiträge: 6209
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: WEB APP

Beitrag von Mathias »

Jetzt stehe ich vor der Frage ganz auf WEB APP umsteigen oder so weiter machen.
Kann ich mit Lazarus eine WEB APP erstellen, gibt es da passende Tools oder muss ich mich von der Idee verabschieden und ggfs. in Richtung Visual Studio (Razor) abwandern?
Ja, es geht.
Aber mehr als ein HelloWorld habe ich bis jetzt nicht probiert.

Ich habe mal ein paar Notizen dazu gemacht.

Code: Alles auswählen

# JavaScript mit Lazarus

## pas2js installieren

### Für WebGL reicht dieses Packet:
fpcupdeluxe --> modules --> pas2js-rtl


### Für LCL/Form Anwendungen noch dies runterladen un installieren:
Downloaden: https://github.com/pascaldragon/Pas2JS_Widget

Folgende Package installieren:
```
/design/package/wcldsgn.lpk
/widgets/wcl.lpk
```

### Get leider nicht, daher fpcupdeluxe verwenden.
https://gitlab.com/freepascal.org/fpc/pas2js
```
fpcupdeluxe --> modules --> pas2js-rtl
```
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Peter.Kainz
Beiträge: 2
Registriert: So 26. Nov 2023, 18:10

Re: WEB APP

Beitrag von Peter.Kainz »

rothy2022 hat geschrieben:
So 5. Nov 2023, 11:29
Kann ich mit Lazarus eine WEB APP erstellen, gibt es da passende Tools oder muss ich mich von der Idee verabschieden und ggfs. in Richtung Visual Studio (Razor) abwandern?
Du kannst xProject verwenden um dein Delphi / Lazarus Projekt ohne Änderung in eine Web Applikation zu kompilieren,
wenn du auch xProject server verwendest brauchst am backend gar nichts entwickeln, zumindest was die Datenbank Anbindung betrifft.

ein paar Beispiele, darunter auch eines mit DB Anbindung, findest du unter
https://green-hill.srl/demos/index.html

lG
peter

Antworten