Routes¶
A Kapow! route specifies the matching criteria for an incoming request on the HTTP User Interface, and the details to handle it.
Kapow! implements a route table where all routes reside.
A route can be set like this:
$ kapow route add \
-X POST \
'/register/{username}' \
-e '/bin/bash -c' \
-c 'touch /var/lib/mydb/"$(kapow get /request/matches/username)"' \
| jq
{
"id": "deadbeef-0d09-11ea-b18e-106530610c4d",
"method": "POST",
"url_pattern": "/register/{username}",
"entrypoint": "/bin/bash -c",
"command": "touch /var/lib/mydb/\"$(kapow get /request/matches/username)\""
}
Let’s use this example to discuss its elements.
Elements¶
id
Route Element¶
Uniquely identifies each route. It is used for instance by kapow route remove
<route_id>
.
Note
The current implementation of Kapow! autogenerates a UUID
for this field.
In the future the user will be able to specify a custom value.
method
Route Element¶
Specifies the HTTP method for the route to match the incoming request.
Note that the route shown above will only match a POST
request.
url_pattern
Route Element¶
It matches the path
component of the URL
of the incoming request.
It can contain regex placeholders for easily capturing fragments of the path.
In the route shown above, a request with a URL /register/joe
would match,
assigning joe
to the placeholder username
.
Kapow! leverages Gorilla Mux for managing routes. For the full story, see https://github.com/gorilla/mux
entrypoint
Route Element¶
This sets the executable to be spawned, along with any arguments required.
In the route shown above, the entrypoint that will be run is /bin/bash -c
,
which is an incomplete recipe. It is then completed by the command
element.
Note
The semantics of this element closely match the Dockerfile
’s ENTRYPOINT
directive.
command
Route Element¶
This is an optional last argument to be passed to the entrypoint.
In the route shown above, it completes the entrypoint
to form the final
incantation to be executed:
/bin/bash -c 'touch /var/lib/mydb/"$(kapow get /request/matches/username)"'
Note
The semantics of this element closely match the Dockerfile
’s CMD
directive.
Matching Algorithm¶
Kapow! leverages Gorilla Mux for this task. Check their documentation for the gory details.