Difference between revisions of "Web Module"
(33 intermediate revisions by 2 users not shown) | |||
Line 3: | Line 3: | ||
=Conventions= | =Conventions= | ||
− | All functions in this module are assigned to the <code><nowiki>http://basex.org/modules/web</nowiki></code> namespace, which is statically bound to the {{Code|web}} prefix.<br/> | + | All functions and errors in this module are assigned to the <code><nowiki>http://basex.org/modules/web</nowiki></code> namespace, which is statically bound to the {{Code|web}} prefix.<br/> |
− | |||
=Functions= | =Functions= | ||
Line 28: | Line 27: | ||
|- | |- | ||
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
− | |{{Func|web:create-url|$url as xs:string, $parameters as map( | + | |{{Func|web:create-url|$url as xs:string, $parameters as map(*)|xs:string}}<br/>{{Func|web:create-url|$url as xs:string, $parameters as map(*), $anchor as xs:string|xs:string}}<br/> |
|- | |- | ||
| '''Summary''' | | '''Summary''' | ||
− | |Creates a new URL from the specified <code>$url</code> string | + | |Creates a new URL from the specified <code>$url</code> string, query string <code>$parameters</code> and an optional {{Code|$anchor}} reference. The keys and values of the map entries will be converted to strings, URL-encoded (see [[#web:encode-url|web:encode-url]]), and appended to the URL as query parameters. If a map entry has more than a single item, all of them will be appended as single parameters. |
|- | |- | ||
| '''Examples''' | | '''Examples''' | ||
Line 69: | Line 68: | ||
|- | |- | ||
| '''Errors''' | | '''Errors''' | ||
− | |{{Error| | + | |{{Error|invalid|#Errors}} the string contains invalid XML characters. |
+ | |} | ||
+ | |||
+ | ==web:forward== | ||
+ | |||
+ | {| width='100%' | ||
|- | |- | ||
− | | ''' | + | | width='120' | '''Signatures''' |
− | |{{ | + | |{{Func|web:forward|$path as xs:string|element(rest:forward)}}<br/>{{Func|web:forward|$path as xs:string, $parameters as map(*)|element(rest:forward)}} |
+ | |- | ||
+ | | '''Summary''' | ||
+ | |Creates a server-side [[RESTXQ#Forwards and Redirects|RESTXQ forward request]] to the specified {{Code|$path}}. The client will not get notified of this forwarding.<br/>The {{Code|$parameter}} argument is processed as described in [[#web:create-url|web:create-url]]. | ||
+ | |- | ||
+ | | '''Examples''' | ||
+ | | | ||
+ | The function call <code><nowiki>web:forward('/a/b')</nowiki></code> creates the following result (which will be interpreted as forwarding if RESTXQ is used): | ||
+ | <syntaxhighlight lang="xml"> | ||
+ | <rest:forward>/a/b</rest:forward> | ||
+ | </syntaxhighlight> | ||
|} | |} | ||
Line 80: | Line 94: | ||
|- | |- | ||
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
− | |{{Func|web:redirect|$ | + | |{{Func|web:redirect|$url as xs:string|element(rest:response)}}<br/>{{Func|web:redirect|$url as xs:string, $parameters as map(*)|element(rest:response)}}<br/>{{Func|web:redirect|$url as xs:string, $parameters as map(*), $anchor as xs:string|element(rest:response)}}<br/> |
|- | |- | ||
| '''Summary''' | | '''Summary''' | ||
− | |Creates a [[RESTXQ#Forwards and Redirects|RESTXQ redirection]] to the specified | + | |Creates a [[RESTXQ#Forwards and Redirects|RESTXQ redirection]] to the specified {{Code|$url}}. The returned response will only work if no other items are returned by the RESTXQ function.<br/>The {{Code|$parameters}} and {{Code|$anchor}} arguments are processed as described in (see [[#web:create-url|web:create-url]]). |
|- | |- | ||
| '''Examples''' | | '''Examples''' | ||
| | | | ||
− | + | The query <code><nowiki>web:redirect('/a/b')</nowiki></code> returns the following result (which will be interpreted as redirection if RESTXQ is used): | |
− | < | + | <syntaxhighlight lang="xml"> |
<rest:response xmlns:rest="http://exquery.org/ns/restxq"> | <rest:response xmlns:rest="http://exquery.org/ns/restxq"> | ||
<http:response xmlns:http="http://expath.org/ns/http-client" status="302"> | <http:response xmlns:http="http://expath.org/ns/http-client" status="302"> | ||
Line 94: | Line 108: | ||
</http:response> | </http:response> | ||
</rest:response> | </rest:response> | ||
− | </ | + | </syntaxhighlight> |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
==web:response-header== | ==web:response-header== | ||
− | |||
− | |||
{| width='100%' | {| width='100%' | ||
|- | |- | ||
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
− | |{{Func|web:response-header||element(rest:response)}}<br/>{{Func|web:response-header|$output as map(*)|element(rest:response)}}<br/>{{Func|web:response-header|$output as map(*), $headers as map(*)|element(rest:response)}}<br/>{{Func|web:response-header|$output as map(*), $headers as map(*), $atts as map(*)|element(rest:response)}}<br/> | + | |{{Func|web:response-header||element(rest:response)}}<br/>{{Func|web:response-header|$output as map(*)?|element(rest:response)}}<br/>{{Func|web:response-header|$output as map(*)?, $headers as map(*)?|element(rest:response)}}<br/>{{Func|web:response-header|$output as map(*)?, $headers as map(*)?, $atts as map(*)?|element(rest:response)}}<br/> |
|- | |- | ||
| '''Summary''' | | '''Summary''' | ||
|Creates a [[RESTXQ#Response|RESTXQ response header]].<br/> | |Creates a [[RESTXQ#Response|RESTXQ response header]].<br/> | ||
− | Serialization parameters and header values can be supplied via the <code>$output</code> and <code>$headers</code> arguments, and status and message attributes can be attached to the | + | Serialization parameters and header values can be supplied via the <code>$output</code> and <code>$headers</code> arguments, and status and message attributes can be attached to the HTTP response element with the <code>$atts</code> argument. |
* <code>media-type</code>: <code>application/octet-stream</code> | * <code>media-type</code>: <code>application/octet-stream</code> | ||
Header options can be supplied via the <code>$headers</code> argument. Empty string values can be specified to invalidate default values. By default, the following header options will be returned: | Header options can be supplied via the <code>$headers</code> argument. Empty string values can be specified to invalidate default values. By default, the following header options will be returned: | ||
Line 127: | Line 128: | ||
| | | | ||
* The function call <code>web:response-header()</code> returns: | * The function call <code>web:response-header()</code> returns: | ||
− | < | + | <syntaxhighlight lang="xml"> |
<rest:response xmlns:rest="http://exquery.org/ns/restxq"> | <rest:response xmlns:rest="http://exquery.org/ns/restxq"> | ||
<http:response xmlns:http="http://expath.org/ns/http-client"/> | <http:response xmlns:http="http://expath.org/ns/http-client"/> | ||
<output:serialization-parameters xmlns:output="http://www.w3.org/2010/xslt-xquery-serialization"/> | <output:serialization-parameters xmlns:output="http://www.w3.org/2010/xslt-xquery-serialization"/> | ||
</rest:response> | </rest:response> | ||
− | </ | + | </syntaxhighlight> |
− | * The following | + | * The following expression returns a media-type for binary data, a caching directive, and the OK status:<br/> |
− | < | + | <syntaxhighlight lang="xquery"> |
web:response-header( | web:response-header( | ||
map { 'media-type': 'application/octet-stream' }, | map { 'media-type': 'application/octet-stream' }, | ||
Line 140: | Line 141: | ||
map { 'status': 200, 'message': 'OK' } | map { 'status': 200, 'message': 'OK' } | ||
) | ) | ||
− | </ | + | </syntaxhighlight> |
* The following RESTXQ function returns the contents of a file to the client with correct media type:<br/> | * The following RESTXQ function returns the contents of a file to the client with correct media type:<br/> | ||
− | < | + | <syntaxhighlight lang="xquery"> |
declare %rest:path('media/{$file}') function local:get($file) { | declare %rest:path('media/{$file}') function local:get($file) { | ||
let $path := 'path/to/' || $file | let $path := 'path/to/' || $file | ||
Line 150: | Line 151: | ||
) | ) | ||
}; | }; | ||
− | </ | + | </syntaxhighlight> |
+ | |} | ||
+ | |||
+ | ==web:error== | ||
+ | |||
+ | {| width='100%' | ||
+ | |- | ||
+ | | width='120' | '''Signatures''' | ||
+ | |{{Func|web:error|$status as xs:integer, $message as xs:string|none}}<br/> | ||
+ | |- | ||
+ | | '''Summary''' | ||
+ | |Raises an error with the QName {{Code|rest:error}}, the specified {{Code|$message}} and the specified {{Code|$status}} as error value.<br/>Calls to this function are equivalent to <code>fn:error(xs:QName('rest:error'), $message, $status)</code>. | ||
+ | |||
+ | See [[RESTXQ#Raise Errors|RESTXQ: Raise Errors]] to learn how the function is helpful in web applications. | ||
+ | |- | ||
+ | | '''Examples''' | ||
+ | | | ||
+ | * <code><nowiki>web:error(404, "The requested resource cannot be found.")</nowiki></code> | ||
+ | |- | ||
+ | | '''Errors''' | ||
+ | |{{Error|status|#Errors}} The supplied status code is invalid. | ||
|} | |} | ||
Line 159: | Line 180: | ||
|Description | |Description | ||
|- | |- | ||
− | |{{Code| | + | |{{Code|invalid}} |
− | | | + | |A string contains invalid XML characters. |
|- | |- | ||
− | |{{Code| | + | |{{Code|status}} |
− | | | + | |The supplied status code is invalid. |
|} | |} | ||
=Changelog= | =Changelog= | ||
+ | |||
+ | ;Version 9.3 | ||
+ | * Added: [[#web:error|web:error]], [[#web:forward|web:forward]] | ||
+ | |||
+ | ;Version 9.2 | ||
+ | * Updated: [[#web:create-url|web:create-url]], [[#web:redirect|web:redirect]]: third argument added. | ||
;Version 9.0 | ;Version 9.0 | ||
− | + | * Updated: [[#web:response-header|web:response-header]]: third argument added; default parameters removed. | |
− | * Updated: [[#web:response-header|web:response-header]]: third argument; default parameters removed. | + | * Updated: error codes updated; errors now use the module namespace |
;Version 8.4 | ;Version 8.4 | ||
− | |||
* Updated: [[#web:response-header|web:response-header]]: serialization method <code>raw</code> was removed (now obsolete). | * Updated: [[#web:response-header|web:response-header]]: serialization method <code>raw</code> was removed (now obsolete). | ||
;Version 8.2 | ;Version 8.2 | ||
− | |||
* Added: [[#web:encode-url|web:encode-url]], [[#web:decode-url|web:decode-url]]. | * Added: [[#web:encode-url|web:encode-url]], [[#web:decode-url|web:decode-url]]. | ||
The module was introduced with Version 8.1. | The module was introduced with Version 8.1. |
Revision as of 12:54, 8 July 2020
This XQuery Module provides convenience functions for building web applications with RESTXQ.
Contents
Conventions
All functions and errors in this module are assigned to the http://basex.org/modules/web
namespace, which is statically bound to the web
prefix.
Functions
web:content-type
Signatures | web:content-type($path as xs:string) as xs:string |
Summary | Returns the content type of a path by analyzing its file suffix. application/octet-stream is returned if the file suffix is unknown.
|
Examples |
|
web:create-url
Signatures | web:create-url($url as xs:string, $parameters as map(*)) as xs:string web:create-url($url as xs:string, $parameters as map(*), $anchor as xs:string) as xs:string |
Summary | Creates a new URL from the specified $url string, query string $parameters and an optional $anchor reference. The keys and values of the map entries will be converted to strings, URL-encoded (see web:encode-url), and appended to the URL as query parameters. If a map entry has more than a single item, all of them will be appended as single parameters.
|
Examples |
|
web:encode-url
Signatures | web:encode-url($string as xs:string) as xs:string |
Summary | Encodes a string to a URL. Spaces are rewritten to + ; * , - , . and _ are adopted; and all other non-ASCII characters and special characters are percent-encoded.
|
Examples |
|
web:decode-url
Signatures | web:decode-url($string as xs:string) as xs:string |
Summary | Decodes a URL to the original string. Percent-encoded characters are decoded to their UTF8 codepoints, and + characters are rewritten to spaces.
|
Examples |
|
Errors | invalid : the string contains invalid XML characters.
|
web:forward
Signatures | web:forward($path as xs:string) as element(rest:forward) web:forward($path as xs:string, $parameters as map(*)) as element(rest:forward)
|
Summary | Creates a server-side RESTXQ forward request to the specified $path . The client will not get notified of this forwarding.The $parameter argument is processed as described in web:create-url.
|
Examples |
The function call |
web:redirect
Signatures | web:redirect($url as xs:string) as element(rest:response) web:redirect($url as xs:string, $parameters as map(*)) as element(rest:response) web:redirect($url as xs:string, $parameters as map(*), $anchor as xs:string) as element(rest:response) |
Summary | Creates a RESTXQ redirection to the specified $url . The returned response will only work if no other items are returned by the RESTXQ function.The $parameters and $anchor arguments are processed as described in (see web:create-url).
|
Examples |
The query <http:response xmlns:http="http://expath.org/ns/http-client" status="302"> <http:header name="location" value="/a/b"/> </http:response> </rest:response> </syntaxhighlight> |
web:response-header
Signatures | web:response-header() as element(rest:response) web:response-header($output as map(*)?) as element(rest:response) web:response-header($output as map(*)?, $headers as map(*)?) as element(rest:response) web:response-header($output as map(*)?, $headers as map(*)?, $atts as map(*)?) as element(rest:response) |
Summary | Creates a RESTXQ response header. Serialization parameters and header values can be supplied via the
Header options can be supplied via the
|
Examples |
<syntaxhighlight lang="xml"> <rest:response xmlns:rest="http://exquery.org/ns/restxq"> <http:response xmlns:http="http://expath.org/ns/http-client"/> <output:serialization-parameters xmlns:output="http://www.w3.org/2010/xslt-xquery-serialization"/> </rest:response> </syntaxhighlight>
<syntaxhighlight lang="xquery"> web:response-header( map { 'media-type': 'application/octet-stream' }, map { 'Cache-Control': 'max-age=3600,public' }, map { 'status': 200, 'message': 'OK' } ) </syntaxhighlight>
<syntaxhighlight lang="xquery"> declare %rest:path('media/{$file}') function local:get($file) { let $path := 'path/to/' || $file return ( web:response-header(map { 'media-type': web:content-type($path) }), file:read-binary($path) ) }; </syntaxhighlight> |
web:error
Signatures | web:error($status as xs:integer, $message as xs:string) as none |
Summary | Raises an error with the QName rest:error , the specified $message and the specified $status as error value.Calls to this function are equivalent to fn:error(xs:QName('rest:error'), $message, $status) .
See RESTXQ: Raise Errors to learn how the function is helpful in web applications. |
Examples |
|
Errors | status : The supplied status code is invalid.
|
Errors
Code | Description |
---|---|
invalid
|
A string contains invalid XML characters. |
status
|
The supplied status code is invalid. |
Changelog
- Version 9.3
- Added: web:error, web:forward
- Version 9.2
- Updated: web:create-url, web:redirect: third argument added.
- Version 9.0
- Updated: web:response-header: third argument added; default parameters removed.
- Updated: error codes updated; errors now use the module namespace
- Version 8.4
- Updated: web:response-header: serialization method
raw
was removed (now obsolete).
- Version 8.2
- Added: web:encode-url, web:decode-url.
The module was introduced with Version 8.1.