[Lazarus] Changes to fpWeb...
Marcos Douglas B. Santos
md at delfire.net
Wed May 2 02:59:31 CEST 2018
On Fri, Jan 13, 2017 at 7:36 PM, Michael Van Canneyt via Lazarus <
lazarus at lists.lazarus-ide.org> wrote:
>
> Hello,
>
> I have committed a serious change to the way fpweb handles requests.
>
> Especially routing of requests was changed.
>
> The old Delphi style routing worked with Datamodules only. The pattern was
> strictly /modulename/actionname or through query variables:
> ?module=xyz&Action=nmo
>
> This old routing is still available by setting the LegacyRouting property
> of
> webhandler or webapplication (custweb) to true. (the new routing described
> below is then disabled)
>
> The new routing is more flexible in 3 ways.
>
> - It is no longer required to use datamodules, but this is still supported.
> There are now 4 methods that can be used to register a route:
>
> - Using a callback procedure
> TRouteCallback = Procedure(ARequest: TRequest; AResponse);
>
> - Using a callback event:
> TRouteEvent = Procedure(ARequest: TRequest; AResponse) of object;
>
> - Using an interface
> IRouteInterface = Interface ['{10115353-10BA-4B00-FDA5-80B69AC4CAD0}']
> Procedure HandleRequest(ARequest : TRequest; AResponse : TResponse);
> end;
> Note that this is a CORBA interface, so no reference counting.
> (although a reference counting version could be added, if desired)
>
> - Using a router object:
> TRouteObject = Class(TObject,IRouteInterface)
> Public
> Procedure HandleRequest(ARequest : TRequest; AResponse : TResponse);
> virtual; abstract;
> end;
> TRouteObjectClass = Class of TRouteObject;
>
> The object class needs to be registered. The router will instantiate
> the
> object and release it once the request was handled.
>
> - Using a datamodule, as it used to be.
>
> More methods can be added, if need be.
> All routes are registered using the HTTPRouter.RegisterRoute method.
> it is overloaded to accept any of the above parameters.
>
> - The router can now match more complex, parametrized routes.
>
> A route is determined by the path part of an URL; query parameters are
> not examined.
>
> /path1/path2/path3/path4
>
> In these paths, parameters and wildcards are recognized:
>
> :param means that it will match any request with a single part in this
> location
> *param means that it will match any request with zero or more path parts
> in this location
>
> examples:
>
> /path1
> /REST/:Resource/:ID
> /REST/:Resource
> /*/something
> /*path/somethiingelse
> /*path
>
> The parameters will be added to TRequest, they are available in the
> (new) RouteParams array property of TRequest.
>
> Paths are matched case sensitively by default, and the first matching
> pattern is used.
>
> The HTTP Modules are registered in the router using classname/* or
> defaultmodulename/*
>
> - A set of methods can be added to the route registration (default is to
> accept all methods).
> The router will match the request method. If the method does not match,
> it will raise an
> exception which will result in a 405 HTTP error.
>
> I have added a demo application. It behaves well, just as the testcases,
> but I would appreciate
> feedback if you have cases where your datamodules no longer behave as they
> used to (both with LegacyRouting=true or false)
>
> Some more improvements to fpweb are planned, but they will not be as
> invasive as this.
Hello Michael,
Is there a documentation link to explain all new features?
I'm gonna start a new web project and I would like to use them.
What about the design packages for Lazarus?
The wizards continue creating Web Module based applications.
This is my environment:
Lazarus 1.8.3 r57764 FPC 3.0.4 i386-win32-win32/win64
Best regards,
Marcos Douglas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20180501/9bcc408e/attachment.html>
More information about the Lazarus
mailing list