Verbose Syntax
The verbose syntax is the oldest routing specification format used in Pedestal and should not generally be used, though it may be of use when generating a route specification from code. It is very close in format to the expanded routing table.
Verbose syntax is composed of a sequence of maps; each map defines a single route.
{:app-name <string> (1)
:scheme <:http or :https>
:host <string>
:port <number>
:constraints <map> (2)
:interceptors <vector> (3)
:path <string> (4)
:verbs <map> (5)
:children <vector> (6)
}
1 | :app-name, :schema, :host, and :port are optional. They define the values for this route and any children. |
2 | :constraints is a map of keyword (matching a path or query parameter) to a regular expression; this is merged into the containing routes constraints |
3 | :interceptors is a vector ???; this is appended to the containing route’s interceptors |
4 | :path is required, and must start with a slash; this is appended to the containing routes path |
5 | :verbs is a mapping from keyword (:get, :post, etc.) to handler |
6 | :children is an optional list of routes nested within this route |
Handlers, the values in the :verbs map, can be a symbol or a map.
A symbol will be resolved to a Var; the value in the Var will be converted to an Interceptor record. In cases where the interceptor is anonymous (has no :name), the symbol is converted to a keyword and used as the :name.
The :name of the interceptor becomes the name of the route.
When a handler is a map, it has the following keys:
{:route-name <string> (1)
:handler <...> (2)
:interceptors <vector> (3)
}
1 | :route-name is optional and will be derived from the handler. |
2 | The handler may be either a symbol or an interceptor. |
3 | :interceptors is optional and identifies interceptors appended to the containing route’s interceptors |
Ultimately, the handler (converted to an interceptor) is appended to the list of interceptors.