Web App Pages¶
Web App Pages is a CrossbarFX Web service that dynamically renders HTML templates (Jinja2) into HTML (or JSON).
The crucial feature of Web App Pages is: the Jinja2 input template to be rendered gets data that comes from calling a configurable WAMP procedure.
This combination allows to build Web or RESTful frontends for WAMP applications very quickly.
Configuration¶
Given a Jinja2 template "greeting.html"
<html>
<title>Greeting</title>
<body>
<h1>Greeting</H1>
<p>
Hi {{ name }}! This is your personalized greeting message:
</p>
<strong>{{ message }}</strong>
</body>
</html>
and a WAMP procedure registered under "com.example.greeting"
class GreetingsBackend(ApplicationSession):
def __init__(self, config):
ApplicationSession.__init__(self, config)
self._counter = 0
@inlineCallbacks
def onJoin(self, details):
yield self.register(self, options=RegisterOptions(details_arg='details'))
@wamp.register('com.example.greeting')
def greeting(self, name, details=None):
self._counter += 1
result = {
'name': name,
'message': 'Hello, "{}"! (counter={})'.format(name, self._counter)
}
return result
a Web App Page service can be configured like this:
{
"type": "wap",
"templates": "../templates",
"sandbox": true,
"routes": [
{
"path": "/greeting/<name>",
"method": "GET",
"call": "com.example.greeting",
"render": "greeting.html"
}
],
"wamp": {
"realm": "realm1"
}
}
The Web App Page service configuration refers to above two parts via
the called WAMP procedure URI "com.example.greeting"
and via
the name of the Jinja2 template file "greeting.html"
, and connects
both to a Web route, here "/greeting/<name>"
.
Parameter |
Type |
Description |
---|---|---|
|
string |
Type of store, must be |
|
string |
Path to templates directory relative to node directory. |
|
bool |
Sandbox Jinja2 rendering run-time environment. |
|
list |
A list with route definitions (see below). |
|
dict |
A dictionary with WAMP session configuration information (see below). |
The routes
configuration item ist a list with route definitions:
Parameter |
Type |
Description |
---|---|---|
|
string |
The HTTP URL matching rule (Werkzeug syntax, see below) |
|
string |
The matching HTTP request method, eg |
|
string |
The WAMP procedure to call when a matching HTTP request was received. |
|
string |
The template file name (within the |
The route matching for HTTP URL (routes.path
) to WAMP procedure is based on
Werkzeug URL Routing.
When a match is found, the WAMP procedure configured in routes.call
is called,
and the procedure is expected to return a dict
, which is passed as input data
to the template configured in routes.render
.
The HTML output returned from the Jinja2 template rendering is returned to
the HTTP client.
The wamp
configuration item configures the WAMP side:
Parameter |
Type |
Description |
---|---|---|
|
string |
The realm in which the WAMP procedure mapped from the HTTP URL is looked after and called within. |
Example¶
Here is a complete node configuration example:
FIXME:
{
"$schema": "https://raw.githubusercontent.com/crossbario/crossbar/master/crossbar.json",
"version": 2,
"controller": {
"fabric": {
"transport": null
}
}
}