A question about RESTXQ rest:form-param()
Hi, in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter? Best, Daniel
Hi Daniel, RTFM. Simply pass the body in %rest:POST("{$body}"). Sorry for disturbing! Daniel -----Ursprüngliche Nachricht----- Von: Zimmel, Daniel <D.Zimmel@ESVmedien.de> Gesendet: Mittwoch, 22. April 2020 11:27 An: BaseX <basex-talk@mailman.uni-konstanz.de> Betreff: [basex-talk] A question about RESTXQ rest:form-param() Hi, in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter? Best, Daniel
Hi Daniel, another way is to use request:* functions [1] available for programmatic inspection of the request. Cheers, M. [1] https://docs.basex.org/wiki/Request_Module On 22/04/20 12:18, Zimmel, Daniel wrote:
Hi Daniel,
RTFM. Simply pass the body in %rest:POST("{$body}").
Sorry for disturbing!
Daniel
-----Ursprüngliche Nachricht----- Von: Zimmel, Daniel <D.Zimmel@ESVmedien.de> Gesendet: Mittwoch, 22. April 2020 11:27 An: BaseX <basex-talk@mailman.uni-konstanz.de> Betreff: [basex-talk] A question about RESTXQ rest:form-param()
Hi,
in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter?
Best, Daniel
Thanks for the hint Marco, I just tried request:parameter-names(): that one works with GET but with POST I get an empty-sequence, I am not sure what the problem is here. I can access the full (unparsed) body, though (I can use that). Daniel -----Ursprüngliche Nachricht----- Von: Marco Lettere <m.lettere@gmail.com> Gesendet: Mittwoch, 22. April 2020 14:24 An: basex-talk@mailman.uni-konstanz.de Betreff: Re: [basex-talk] A question about RESTXQ rest:form-param() Hi Daniel, another way is to use request:* functions [1] available for programmatic inspection of the request. Cheers, M. [1] https://docs.basex.org/wiki/Request_Module On 22/04/20 12:18, Zimmel, Daniel wrote:
Hi Daniel,
RTFM. Simply pass the body in %rest:POST("{$body}").
Sorry for disturbing!
Daniel
-----Ursprüngliche Nachricht----- Von: Zimmel, Daniel <D.Zimmel@ESVmedien.de> Gesendet: Mittwoch, 22. April 2020 11:27 An: BaseX <basex-talk@mailman.uni-konstanz.de> Betreff: [basex-talk] A question about RESTXQ rest:form-param()
Hi,
in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter?
Best, Daniel
Are you setting the mime type to "application/x-www-form-urlencoded"? This is the prerequisite in order to get the body of a post parsed to form parameters. M. On 22/04/20 15:22, Zimmel, Daniel wrote:
Thanks for the hint Marco,
I just tried request:parameter-names(): that one works with GET but with POST I get an empty-sequence, I am not sure what the problem is here. I can access the full (unparsed) body, though (I can use that).
Daniel
-----Ursprüngliche Nachricht----- Von: Marco Lettere <m.lettere@gmail.com> Gesendet: Mittwoch, 22. April 2020 14:24 An: basex-talk@mailman.uni-konstanz.de Betreff: Re: [basex-talk] A question about RESTXQ rest:form-param()
Hi Daniel, another way is to use request:* functions [1] available for programmatic inspection of the request. Cheers, M.
[1] https://docs.basex.org/wiki/Request_Module
On 22/04/20 12:18, Zimmel, Daniel wrote:
Hi Daniel,
RTFM. Simply pass the body in %rest:POST("{$body}").
Sorry for disturbing!
Daniel
-----Ursprüngliche Nachricht----- Von: Zimmel, Daniel <D.Zimmel@ESVmedien.de> Gesendet: Mittwoch, 22. April 2020 11:27 An: BaseX <basex-talk@mailman.uni-konstanz.de> Betreff: [basex-talk] A question about RESTXQ rest:form-param()
Hi,
in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter?
Best, Daniel
the mime type seems correct, all params are being sent. I do not have problems getting the body, only request:parameter-names() does not give any values. (request:header works, for example) -----Ursprüngliche Nachricht----- Von: Marco Lettere <m.lettere@gmail.com> Gesendet: Mittwoch, 22. April 2020 15:31 An: Zimmel, Daniel <D.Zimmel@ESVmedien.de>; basex-talk@mailman.uni-konstanz.de Betreff: Re: AW: [basex-talk] A question about RESTXQ rest:form-param() Are you setting the mime type to "application/x-www-form-urlencoded"? This is the prerequisite in order to get the body of a post parsed to form parameters. M. On 22/04/20 15:22, Zimmel, Daniel wrote:
Thanks for the hint Marco,
I just tried request:parameter-names(): that one works with GET but with POST I get an empty-sequence, I am not sure what the problem is here. I can access the full (unparsed) body, though (I can use that).
Daniel
-----Ursprüngliche Nachricht----- Von: Marco Lettere <m.lettere@gmail.com> Gesendet: Mittwoch, 22. April 2020 14:24 An: basex-talk@mailman.uni-konstanz.de Betreff: Re: [basex-talk] A question about RESTXQ rest:form-param()
Hi Daniel, another way is to use request:* functions [1] available for programmatic inspection of the request. Cheers, M.
[1] https://docs.basex.org/wiki/Request_Module
On 22/04/20 12:18, Zimmel, Daniel wrote:
Hi Daniel,
RTFM. Simply pass the body in %rest:POST("{$body}").
Sorry for disturbing!
Daniel
-----Ursprüngliche Nachricht----- Von: Zimmel, Daniel <D.Zimmel@ESVmedien.de> Gesendet: Mittwoch, 22. April 2020 11:27 An: BaseX <basex-talk@mailman.uni-konstanz.de> Betreff: [basex-talk] A question about RESTXQ rest:form-param()
Hi,
in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter?
Best, Daniel
I set up this restxq [1]. And call it with something like [2]. Got an output of [3] which looks like what I expect. M. [1] module namespace t = "urn:test"; declare %rest:path("test") %rest:POST %rest:consumes("application/x-www-form-urlencoded") %output:method("html") function t:test() { <html> <body> <p>{request:parameter-names() ! (. || "=" || request:parameter(.))}</p> </body> </html> }; [2] curl --location --request POST 'http://localhost:8984/test' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'param1=Hello' \ --data-urlencode 'param2=World' [3] <html> <body> <p>param1=Hello param2=World</p> </body> </html> On 22/04/20 16:03, Zimmel, Daniel wrote:
the mime type seems correct, all params are being sent. I do not have problems getting the body, only request:parameter-names() does not give any values. (request:header works, for example)
-----Ursprüngliche Nachricht----- Von: Marco Lettere <m.lettere@gmail.com> Gesendet: Mittwoch, 22. April 2020 15:31 An: Zimmel, Daniel <D.Zimmel@ESVmedien.de>; basex-talk@mailman.uni-konstanz.de Betreff: Re: AW: [basex-talk] A question about RESTXQ rest:form-param()
Are you setting the mime type to "application/x-www-form-urlencoded"? This is the prerequisite in order to get the body of a post parsed to form parameters. M.
On 22/04/20 15:22, Zimmel, Daniel wrote:
Thanks for the hint Marco,
I just tried request:parameter-names(): that one works with GET but with POST I get an empty-sequence, I am not sure what the problem is here. I can access the full (unparsed) body, though (I can use that).
Daniel
-----Ursprüngliche Nachricht----- Von: Marco Lettere <m.lettere@gmail.com> Gesendet: Mittwoch, 22. April 2020 14:24 An: basex-talk@mailman.uni-konstanz.de Betreff: Re: [basex-talk] A question about RESTXQ rest:form-param()
Hi Daniel, another way is to use request:* functions [1] available for programmatic inspection of the request. Cheers, M.
[1] https://docs.basex.org/wiki/Request_Module
On 22/04/20 12:18, Zimmel, Daniel wrote:
Hi Daniel,
RTFM. Simply pass the body in %rest:POST("{$body}").
Sorry for disturbing!
Daniel
-----Ursprüngliche Nachricht----- Von: Zimmel, Daniel <D.Zimmel@ESVmedien.de> Gesendet: Mittwoch, 22. April 2020 11:27 An: BaseX <basex-talk@mailman.uni-konstanz.de> Betreff: [basex-talk] A question about RESTXQ rest:form-param()
Hi,
in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter?
Best, Daniel
hmm, what is wrong with this stripped example? ######## form.xqm: module namespace page = 'http://basex.org/examples/web-page'; declare %rest:path("/esv/fun/form") %rest:single function page:form() { let $body := <div> <form action="/esv/test-form" id="myform2" method="post"> <input type="text" name="foo"></input> <input type="hidden" name="key" value="key"/> <input type="submit" value="submit"></input> </form> </div> return (web:response-header(map {'method':'xhtml'}), $body) }; ######## test-form.xqm: module namespace esv = 'esv/queries'; declare %rest:POST("{$body}") %rest:form-param("key", "{$key}") %rest:path("/esv/test-form") %rest:consumes("application/x-www-form-urlencoded") %rest:single %output:method("text") function esv:test-form( $body as xs:string, $key as xs:string ) { "parameter-names(): " || request:parameter-names(), "$body: " || $body, "$key: " || $key }; ######## output: parameter-names(): $body: foo=bar&key=key $key: key Von: Marco Lettere <m.lettere@gmail.com> Gesendet: Donnerstag, 23. April 2020 10:40 An: Zimmel, Daniel <D.Zimmel@ESVmedien.de>; basex-talk@mailman.uni-konstanz.de Betreff: Re: AW: AW: [basex-talk] A question about RESTXQ rest:form-param() I set up this restxq [1]. And call it with something like [2]. Got an output of [3] which looks like what I expect. M. [1] module namespace t = "urn:test"; declare %rest:path("test") %rest:POST %rest:consumes("application/x-www-form-urlencoded") %output:method("html") function t:test() { <html> <body> <p>{request:parameter-names() ! (. || "=" || request:parameter(.))}</p> </body> </html> }; [2] curl --location --request POST 'http://localhost:8984/test' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'param1=Hello' \ --data-urlencode 'param2=World' [3] <html> <body> <p>param1=Hello param2=World</p> </body> </html> On 22/04/20 16:03, Zimmel, Daniel wrote: the mime type seems correct, all params are being sent. I do not have problems getting the body, only request:parameter-names() does not give any values. (request:header works, for example) -----Ursprüngliche Nachricht----- Von: Marco Lettere <m.lettere@gmail.com><mailto:m.lettere@gmail.com> Gesendet: Mittwoch, 22. April 2020 15:31 An: Zimmel, Daniel <D.Zimmel@ESVmedien.de><mailto:D.Zimmel@ESVmedien.de>; basex-talk@mailman.uni-konstanz.de<mailto:basex-talk@mailman.uni-konstanz.de> Betreff: Re: AW: [basex-talk] A question about RESTXQ rest:form-param() Are you setting the mime type to "application/x-www-form-urlencoded"? This is the prerequisite in order to get the body of a post parsed to form parameters. M. On 22/04/20 15:22, Zimmel, Daniel wrote: Thanks for the hint Marco, I just tried request:parameter-names(): that one works with GET but with POST I get an empty-sequence, I am not sure what the problem is here. I can access the full (unparsed) body, though (I can use that). Daniel -----Ursprüngliche Nachricht----- Von: Marco Lettere <m.lettere@gmail.com><mailto:m.lettere@gmail.com> Gesendet: Mittwoch, 22. April 2020 14:24 An: basex-talk@mailman.uni-konstanz.de<mailto:basex-talk@mailman.uni-konstanz.de> Betreff: Re: [basex-talk] A question about RESTXQ rest:form-param() Hi Daniel, another way is to use request:* functions [1] available for programmatic inspection of the request. Cheers, M. [1] https://docs.basex.org/wiki/Request_Module On 22/04/20 12:18, Zimmel, Daniel wrote: Hi Daniel, RTFM. Simply pass the body in %rest:POST("{$body}"). Sorry for disturbing! Daniel -----Ursprüngliche Nachricht----- Von: Zimmel, Daniel <D.Zimmel@ESVmedien.de><mailto:D.Zimmel@ESVmedien.de> Gesendet: Mittwoch, 22. April 2020 11:27 An: BaseX <basex-talk@mailman.uni-konstanz.de><mailto:basex-talk@mailman.uni-konstanz.de> Betreff: [basex-talk] A question about RESTXQ rest:form-param() Hi, in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter? Best, Daniel
participants (2)
-
Marco Lettere -
Zimmel, Daniel