sgcHTML laat u een web-UI in Delphi bouwen, uit componenten, zonder JavaScript te schrijven. Tot nu toe draaiden die pagina's op de sgcWebSockets-server. U kunt dezelfde pagina's nu serveren vanuit elke Embarcadero WebBroker-toepassing en vanuit DataSnap-servers, zodat een bestaande REST-backend kan uitgroeien tot een volledige web-frontend zonder Delphi te verlaten. De details, de componenten en de code staan op de nieuwe pagina WebBroker & DataSnap.
Dit werkt omdat sgcHTML een renderer is, geen server. De component- en node-laag maakt van uw pagina een gewone HTML-string, zonder afhankelijkheid van enige socket-, transport- of serverklasse. Die string kan net zo goed de body van een TWebResponse zijn als het antwoord van een WebSocket-server, en dat is wat de twee integraties hieronder mogelijk maakt.
Elke WebBroker-toepassing
Het component TsgcHTMX_Engine_Server_WebBroker implementeert de standaard IWebDispatch-interface. Plaats het op uw TWebModule, of roep de DispatchRequest ervan aan vanuit een TWebActionItem, en het serveert de sgcHTML-pagina, de ingebouwde CSS- en JavaScript-assets, en uw htmx-routes. Het draait op een standalone TIdHTTPWebBrokerBridge, onder ISAPI, onder een Apache-module en als CGI, zodat het past bij welke WebBroker-host u ook al inzet.
uses
Web.HTTPApp, sgcHTMX_Engine_Server_WebBroker, sgcHTMX_Router;
// Any WebBroker host: the engine's Owner is the web module,
// so the standard WebBroker dispatcher calls it automatically
FEngine := TsgcHTMX_Engine_Server_WebBroker.Create(WebModule1);
FEngine.Router := FRouter; // your htmx routes and the page
Interactiviteit gebruikt gewone htmx HTTP-round-trips, dus er is geen WebSocket nodig. Als u dat liever heeft, is er een klassieke modus zonder htmx, met gewone navigatie over volledige pagina's en standaard formulier-posts, die werkt met JavaScript uitgeschakeld. Het enige wat gewone WebBroker niet kan, is pushen, want onder CGI en ISAPI bezitten de request en response de socket. Gebruik voor live updates op een gewone WebBroker-host htmx-polling, of stap over op de bridge-servers hieronder.
DataSnap, met live updates op één poort
sgcWebSockets levert al kant-en-klare bridge-servers die de Indy TIdHTTPWebBrokerBridge in een DataSnap- of WebBroker-toepassing vervangen, zodat de server WebSockets, HTTP/2 of HTTP.sys op dezelfde poort krijgt. sgcHTML sluit er nu rechtstreeks op aan. Wijs de Server van de engine toe aan uw bridge-server en de pagina, de bijbehorende assets en de live WebSocket-fragmentpush draaien allemaal op dezelfde poort als uw DataSnap REST-endpoints.
uses
sgcWebSocket_Server_WebBrokerBridge,
sgcHTMX_Engine_Server_WebBrokerBridge, sgcHTMX_Router;
// A DataSnap / WebBroker bridge server
FServer := TsgcWSHTTPWebBrokerBridgeServer.Create(Self);
FServer.Port := 8080;
FEngine := TsgcHTMX_Engine_Server_WebBrokerBridge.Create(Self);
FEngine.Router := FRouter; // your htmx routes and the page
FEngine.Server := FServer; // share the DataSnap port
FServer.Active := True;
// push a live HTML fragment to every connected browser
FEngine.BroadcastFragment(BuildStatsFragment);
De engine claimt alleen zijn eigen paden, de pagina, de assets en uw routes. Al het overige gaat ongewijzigd door, zodat /datasnap/* REST en de acties die al op uw TWebModule staan precies als voorheen blijven werken, en elke OnCommandRequest-handler die u heeft wordt geketend en draait eerst. Hetzelfde patroon dekt alle drie de bridge-servers: TsgcHTMX_Engine_Server_WebBrokerBridge serveert de Indy-bridge over HTTP/1.1 en de HTTP/2-bridge, en TsgcHTMX_Engine_Server_HTTPAPI_WebBrokerBridge serveert de HTTP.sys-bridge.
Eén backend, twee gezichten
De prettige consequentie van hosten op DataSnap is dat één set servermethoden dubbel werk kan doen. Uw TDSServerModule is uw REST- en JSON-API op /datasnap/rest voor elke externe client, en het is ook de gegevensbron waaruit uw sgcHTML-pagina's in-process renderen. U schrijft de bedrijfslogica één keer, en u krijgt er zowel een machine-API als een menselijke web-UI uit, op één server, op één poort.
Drie demo's om mee te beginnen
Het product bevat drie demo's die dezelfde kleine toepassing in verschillende stijlen bouwen, zodat u degene kunt kiezen die bij uw project past:
Demos\60.HTML\11.WebBroker, een WebBroker-toepassing met een DataSnap-backend en htmx-interactiviteit, in zowel een standalone- als een ISAPI-build.Demos\60.HTML\12.WebBrokerHTML, dezelfde toepassing in de klassieke plain-HTML-stijl, geen htmx, navigatie over volledige pagina's en standaard formulier-posts, opnieuw met een DataSnap-backend.Demos\40.DataSnap\Server_Indy_HTTP_HTML, een real-time sgcHTML-dashboard dat zichzelf bijwerkt via WebSockets terwijl de DataSnap REST-methoden op dezelfde poort antwoorden.
Vereisten en beschikbaarheid
De WebBroker-engine ondersteunt Delphi 7 tot en met Delphi 13. Het DataSnap-bridge-pad vereist een Delphi-editie die DataSnap bevat, namelijk Enterprise of Architect. WebBroker en DataSnap zijn frameworks van Delphi en C++Builder, dus dit hostingverhaal is specifiek voor die twee compilers. De sgcHTML .NET-port host in plaats daarvan op ASP.NET Core, en bereikt daar hetzelfde resultaat.
Alles wat hier wordt beschreven, is nu beschikbaar. De volledige uitleg, de componentreferentie en de codevoorbeelden staan op de pagina WebBroker & DataSnap.
Vragen, feedback of hulp bij het inbouwen van sgcHTML in uw DataSnap-server? Neem contact op. U krijgt antwoord van de mensen die de code hebben geschreven.
