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"``
.. code-block:: html+jinja
Greeting
Greeting
Hi {{ name }}! This is your personalized greeting message:
{{ message }}
and a WAMP procedure registered under ``"com.example.greeting"``
.. code-block:: python
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:
.. code-block:: json
{
"type": "wap",
"templates": "../templates",
"sandbox": true,
"routes": [
{
"path": "/greeting/",
"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/"``.
============== =========== ===========
Parameter Type Description
============== =========== ===========
``type`` string Type of store, must be ``"wap"`` (for "Web Application").
``templates`` string Path to templates directory relative to node directory.
``sandbox`` bool Sandbox Jinja2 rendering run-time environment.
``routes`` list A list with route definitions (see below).
``wamp`` dict A dictionary with WAMP session configuration information (see below).
============== =========== ===========
The ``routes`` configuration item ist a list with route definitions:
============== =========== ===========
Parameter Type Description
============== =========== ===========
``path`` string The HTTP URL matching rule (Werkzeug syntax, see below)
``method`` string The matching HTTP request method, eg ``"GET"``.
``call`` string The WAMP procedure to call when a matching HTTP request was received.
``render`` string The template file name (within the ``templates`` directory) that is used to render the client response.
============== =========== ===========
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
============== =========== ===========
``realm`` 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:
.. code-block:: json
{
"$schema": "https://raw.githubusercontent.com/crossbario/crossbar/master/crossbar.json",
"version": 2,
"controller": {
"fabric": {
"transport": null
}
}
}