Am 23.06.2019 um 00:50 schrieb Michael Van Canneyt:


On Sat, 22 Jun 2019, Sven Barth via fpc-pascal wrote:

The REst Module has the additional disadvantage that you must have an
initial /REST/ or whatever part in your URL. With the dispatcher on a
datamodule, you can skip this if so desired...

Okay, independently of whether the REST module is the optimal solution or not, it should work, right? (and shouldn't the Wiki entry then mention the advantages/disadvantages of the two approaches? Cause when looking at the SQLDB REST module I thought "yay, less stuff to configure" and rolled with that)

What exactly is less to configure ? :)

Looking at the Wiki again I was fooled by the Datamodule having 8 bullet points, the SQLDBRestModule having 5, but the later simply shortening stuff with point five... So yeah... not really less to configure... My fault. ^^'



Cause with the changes you committed the example provided with Lazarus still does not work (even if I change MyDispatcher.Active to False and MyDispatcher.BasePath to 'REST'). The error is always "INVALID RESOURCE" which means that ExtractRestResourceName returned an empty string (which is logical, cause there neither exists a route that sets 'resource' nor is HandleMetadataRequest ever called).


Ah. Documentation issue.
If you use a restmodule, then I expect the resource to be provided using
?resourceParam=Name, not in the URL.

See
function TSQLDBRestDispatcher.ExtractRestResourceName(IO: TRestIO): UTF8String;

Ah! But that isn't mentioned in the Wiki, right? Cause the Wiki only mentioned the URL based stuff and thus I assumed the SQLDBRESTModule to behave the same...

By the way: I sometimes get a EStreamError *after* all data had been sent to the client. I have not yet found a reproducible way for this...


We can of course change that to try and look in the URL as well using
GetNextPathInfo on the request if the routes are not registered,
that should work.

But then it needs to be done early on in the HandleRequest because the
rdoInConnection needs to be observed, so the path can be read only once. It will probably require a new rdoUseRequestPathInfo, which could be set by
the restmodule... I will look at this.


Would at least be nice to not have to care how one needs to call the server side...

- localhost:8080/metadata works
- localhost:8080/users returns "INVALID RESOURCE"

Because it has rdoConnectionInURL set, and so you must do
localhost:8080/expenses/users

Ahhhhhh! Hadn't seen that this option is active... Okay, then it indeed works as expected, both with and without rdoConnectionInURL.

By the way: I noticed a slight annoyance, but I don't know whether one can really do something about that: When I set rdoConnectionInURL to False inside the object inspector it turns on again, because rdoConnectionResource is set. Took me a moment to look at the source code to see that I need to disable rdoConnectionResource first. Don't know what a better solution would be...

Further thing I noticed when testing BufClient and CSVClient: Changing the resource doesn't work there either. I don't get an exception like with JSONClient, but simply nothing happens.

Regards,
Sven
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to