[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