doc: style fixes
This commit is contained in:
@@ -4,13 +4,14 @@
|
|||||||
`kapow server` sets up three HTTP server interfaces, each with a distinct and
|
`kapow server` sets up three HTTP server interfaces, each with a distinct and
|
||||||
clear purpose.
|
clear purpose.
|
||||||
|
|
||||||
|
|
||||||
User Interface
|
User Interface
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
The User HTTP interface is used to serve final user requests.
|
The User HTTP interface is used to serve final user requests.
|
||||||
|
|
||||||
By default it binds to address ``0.0.0.0`` and port ``8080``, but can be changed via
|
By default it binds to address ``0.0.0.0`` and port ``8080``, but that can be
|
||||||
the ``--bind`` flag.
|
changed via the ``--bind`` flag.
|
||||||
|
|
||||||
|
|
||||||
Control Interface
|
Control Interface
|
||||||
@@ -19,8 +20,8 @@ Control Interface
|
|||||||
The Control HTTP interface is used by the command `kapow route` to
|
The Control HTTP interface is used by the command `kapow route` to
|
||||||
administer the list of system routes.
|
administer the list of system routes.
|
||||||
|
|
||||||
By default it binds to address ``127.0.0.1`` and port ``8081``, but can be changed
|
By default it binds to address ``127.0.0.1`` and port ``8081``, but that can be
|
||||||
via the ``--control-bind`` flag.
|
changed via the ``--control-bind`` flag.
|
||||||
|
|
||||||
|
|
||||||
Data Interface
|
Data Interface
|
||||||
@@ -29,5 +30,5 @@ Data Interface
|
|||||||
The Data HTTP interface is used by the commands ``kapow get`` and ``kapow
|
The Data HTTP interface is used by the commands ``kapow get`` and ``kapow
|
||||||
set`` to exchange the data for a particular request.
|
set`` to exchange the data for a particular request.
|
||||||
|
|
||||||
By default it binds to address ``127.0.0.1`` and port ``8082``, but can be changed
|
By default it binds to address ``127.0.0.1`` and port ``8082``, but that can be
|
||||||
via the ``--data-bind`` flag.
|
changed via the ``--data-bind`` flag.
|
||||||
|
|||||||
@@ -7,17 +7,17 @@ Single Static Binary
|
|||||||
|
|
||||||
- Deployment is then as simple as it gets.
|
- Deployment is then as simple as it gets.
|
||||||
|
|
||||||
- Docker-friendly.
|
- ``Docker``-friendly.
|
||||||
|
|
||||||
|
|
||||||
Shell Agnostic
|
Shell Agnostic
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
- *Kapow!* knows nothing, and makes no assumptions, about the shell you are using.
|
- *Kapow!*, like John Snow, knows nothing, and makes no assumptions about the
|
||||||
It only spawns executables.
|
shell you are using. It only spawns executables.
|
||||||
|
|
||||||
- You are free to implement a client to the Data API directly if you are so
|
- You are free to implement a client to the Data API directly if you are so
|
||||||
inclined. The spec provides all the necessary details.
|
inclined. The spec provides all the necessary details.
|
||||||
|
|
||||||
|
|
||||||
Not a Silver Bullet
|
Not a Silver Bullet
|
||||||
@@ -26,6 +26,6 @@ Not a Silver Bullet
|
|||||||
You should not use *Kapow!* if your project requires complex business logic.
|
You should not use *Kapow!* if your project requires complex business logic.
|
||||||
|
|
||||||
If you try to encode business logic in a shell script, you will **deeply**
|
If you try to encode business logic in a shell script, you will **deeply**
|
||||||
regret it.
|
regret it soon enough.
|
||||||
|
|
||||||
*Kapow!* is designed for automating simple stuff.
|
*Kapow!* is designed for automating simple stuff.
|
||||||
|
|||||||
@@ -12,18 +12,19 @@ answered by the `User HTTP Interface`.
|
|||||||
|
|
||||||
The user makes a request to the `User HTTP Interface`.
|
The user makes a request to the `User HTTP Interface`.
|
||||||
|
|
||||||
- The request is matched against the route table
|
- The request is matched against the route table.
|
||||||
|
|
||||||
- ``kapow`` provides a `HANDLER_ID` to identify this request and don't mix it
|
- ``kapow`` provides a `HANDLER_ID` to identify this request and don't mix it
|
||||||
with other requests that could be running concurrently.
|
with other requests that could be running concurrently.
|
||||||
|
|
||||||
|
|
||||||
2. spawn
|
2. spawn
|
||||||
--------
|
--------
|
||||||
|
|
||||||
``kapow`` spawns the executable specified as entrypoint in the matching
|
``kapow`` spawns the executable specified as entrypoint in the matching
|
||||||
route.
|
route.
|
||||||
|
|
||||||
The default entrypoint is ``/bin/sh``; we'll explain this workflow for now.
|
The default entrypoint is ``/bin/sh``; let's focus on this workflow.
|
||||||
|
|
||||||
The spawned entrypoint is run with the following variables added to its
|
The spawned entrypoint is run with the following variables added to its
|
||||||
environment:
|
environment:
|
||||||
@@ -32,6 +33,7 @@ environment:
|
|||||||
- ``KAPOW_DATAAPI_URL``: With the URL of the `Data HTTP Interface`
|
- ``KAPOW_DATAAPI_URL``: With the URL of the `Data HTTP Interface`
|
||||||
- ``KAPOW_CONTROLAPI_URL``: With the URL of the `Control HTTP Interface`
|
- ``KAPOW_CONTROLAPI_URL``: With the URL of the `Control HTTP Interface`
|
||||||
|
|
||||||
|
|
||||||
3. ``kapow set /response/body banana``
|
3. ``kapow set /response/body banana``
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
|
|
||||||
@@ -43,18 +45,20 @@ available via these commands:
|
|||||||
- ``kapow set /response/...``
|
- ``kapow set /response/...``
|
||||||
|
|
||||||
These commands use the aforementioned environment variables to read data
|
These commands use the aforementioned environment variables to read data
|
||||||
from the user request and to write the response. They accept data
|
from the user request and to write the response. They accept data either as
|
||||||
either as arguments or from ``stdin``.
|
arguments or from ``stdin``.
|
||||||
|
|
||||||
|
|
||||||
4. exit
|
4. exit
|
||||||
-------
|
-------
|
||||||
|
|
||||||
The shell dies.
|
The shell dies. Long live the shell!
|
||||||
|
|
||||||
|
|
||||||
5. response
|
5. response
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
``kapow`` finalizes the original request.
|
``kapow`` finalizes the original request. Enjoy your banana now.
|
||||||
|
|
||||||
|
|
||||||
.. todo::
|
.. todo::
|
||||||
|
|||||||
@@ -4,9 +4,8 @@ The *Kapow!* Resource Tree
|
|||||||
This is the model that *Kapow!* uses to expose the internals of the user request
|
This is the model that *Kapow!* uses to expose the internals of the user request
|
||||||
being serviced.
|
being serviced.
|
||||||
|
|
||||||
|
We use this tree to get access to any data that comes in the request, as well as
|
||||||
We use this tree to get access to any data that comes in the request,
|
to compose the response.
|
||||||
as well as to compose the response.
|
|
||||||
|
|
||||||
We access the resource tree easily with the ``kapow set`` and ``kapow get``
|
We access the resource tree easily with the ``kapow set`` and ``kapow get``
|
||||||
subcommands.
|
subcommands.
|
||||||
@@ -47,6 +46,7 @@ Overview
|
|||||||
│ └──── <name> HTTP request cookie
|
│ └──── <name> HTTP request cookie
|
||||||
└──── body Response body
|
└──── body Response body
|
||||||
|
|
||||||
|
|
||||||
Resources
|
Resources
|
||||||
---------
|
---------
|
||||||
|
|
||||||
@@ -59,13 +59,13 @@ The HTTP method of the incoming request.
|
|||||||
|
|
||||||
If the user runs:
|
If the user runs:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ curl -X POST http://kapow.example:8080
|
$ curl -X POST http://kapow.example:8080
|
||||||
|
|
||||||
then, when handling the request:
|
then, when handling the request:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow get /request/method
|
$ kapow get /request/method
|
||||||
POST
|
POST
|
||||||
@@ -74,20 +74,19 @@ then, when handling the request:
|
|||||||
``/request/host`` Resource
|
``/request/host`` Resource
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The ``Host`` header as defined in the HTTP/1.1 spec of the incoming
|
The ``Host`` header as defined in the HTTP/1.1 spec of the incoming request.
|
||||||
request.
|
|
||||||
|
|
||||||
**Sample Usage**
|
**Sample Usage**
|
||||||
|
|
||||||
If the user runs:
|
If the user runs:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ curl http://kapow.example:8080
|
$ curl http://kapow.example:8080
|
||||||
|
|
||||||
then, when handling the request:
|
then, when handling the request:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow get /request/host
|
$ kapow get /request/host
|
||||||
kapow.example
|
kapow.example
|
||||||
@@ -102,17 +101,18 @@ Contains the path substring of the URL.
|
|||||||
|
|
||||||
If the user runs:
|
If the user runs:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ curl http://kapow.example:8080/foo/bar?qux=1
|
$ curl http://kapow.example:8080/foo/bar?qux=1
|
||||||
|
|
||||||
then, when handling the request:
|
then, when handling the request:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow get /request/path
|
$ kapow get /request/path
|
||||||
/foo/bar
|
/foo/bar
|
||||||
|
|
||||||
|
|
||||||
``/request/matches/<name>`` Resource
|
``/request/matches/<name>`` Resource
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -122,23 +122,24 @@ Contains the part of the URL captured by the pattern ``name``.
|
|||||||
|
|
||||||
For a route defined like this:
|
For a route defined like this:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow route add /foo/{mymatch}/bar
|
$ kapow route add /foo/{mymatch}/bar
|
||||||
|
|
||||||
if the user runs:
|
if the user runs:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ curl http://kapow.example:8080/foo/1234/bar
|
$ curl http://kapow.example:8080/foo/1234/bar
|
||||||
|
|
||||||
then, when handling the request:
|
then, when handling the request:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow get /request/matches/mymatch
|
$ kapow get /request/matches/mymatch
|
||||||
1234
|
1234
|
||||||
|
|
||||||
|
|
||||||
``/request/params/<name>`` Resource
|
``/request/params/<name>`` Resource
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -148,13 +149,13 @@ Contains the value of the URL parameter ``name``
|
|||||||
|
|
||||||
If the user runs:
|
If the user runs:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ curl http://kapow.example:8080/foo?myparam=bar
|
$ curl http://kapow.example:8080/foo?myparam=bar
|
||||||
|
|
||||||
then, when handling the request:
|
then, when handling the request:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow get /request/params/myparam
|
$ kapow get /request/params/myparam
|
||||||
myparam
|
myparam
|
||||||
@@ -169,13 +170,13 @@ Contains the value of the HTTP header ``name`` of the incoming request.
|
|||||||
|
|
||||||
If the user runs:
|
If the user runs:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ curl -H X-My-Header=Bar http://kapow.example:8080/
|
$ curl -H X-My-Header=Bar http://kapow.example:8080/
|
||||||
|
|
||||||
then, when handling the request:
|
then, when handling the request:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow get /request/headers/X-My-Header
|
$ kapow get /request/headers/X-My-Header
|
||||||
Bar
|
Bar
|
||||||
@@ -190,17 +191,18 @@ Contains the value of the HTTP cookie ``name`` of the incoming request.
|
|||||||
|
|
||||||
If the user runs:
|
If the user runs:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ curl --cookie "MYCOOKIE=Bar" http://kapow.example:8080/
|
$ curl --cookie MYCOOKIE=Bar http://kapow.example:8080/
|
||||||
|
|
||||||
then, when handling the request:
|
then, when handling the request:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow get /request/cookies/MYCOOKIE
|
$ kapow get /request/cookies/MYCOOKIE
|
||||||
Bar
|
Bar
|
||||||
|
|
||||||
|
|
||||||
``/request/form/<name>`` Resource
|
``/request/form/<name>`` Resource
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -210,13 +212,13 @@ Contains the value of the field ``name`` of the incoming request.
|
|||||||
|
|
||||||
If the user runs:
|
If the user runs:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ curl -F -d myfield=foo http://kapow.example:8080/
|
$ curl -F -d myfield=foo http://kapow.example:8080/
|
||||||
|
|
||||||
then, when handling the request:
|
then, when handling the request:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow get /request/form/myfield
|
$ kapow get /request/form/myfield
|
||||||
foo
|
foo
|
||||||
@@ -231,13 +233,13 @@ Contains the name of the file uploaded through the incoming request.
|
|||||||
|
|
||||||
If the user runs:
|
If the user runs:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ curl -F -d myfile=@filename.txt http://kapow.example:8080/
|
$ curl -F -d myfile=@filename.txt http://kapow.example:8080/
|
||||||
|
|
||||||
then, when handling the request:
|
then, when handling the request:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow get /request/files/myfile/filename
|
$ kapow get /request/files/myfile/filename
|
||||||
filename.txt
|
filename.txt
|
||||||
@@ -252,13 +254,13 @@ Contents of the file that is being uploaded in the incoming request.
|
|||||||
|
|
||||||
If the user runs:
|
If the user runs:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ curl -F -d myfile=@filename.txt http://kapow.example:8080/
|
$ curl -F -d myfile=@filename.txt http://kapow.example:8080/
|
||||||
|
|
||||||
then, when handling the request:
|
then, when handling the request:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow get /request/files/myfile/content
|
$ kapow get /request/files/myfile/content
|
||||||
...filename.txt contents...
|
...filename.txt contents...
|
||||||
@@ -273,13 +275,13 @@ Raw contents of the incoming request HTTP body.
|
|||||||
|
|
||||||
If the user runs:
|
If the user runs:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ curl --data-raw foobar http://kapow.example:8080/
|
$ curl --data-raw foobar http://kapow.example:8080/
|
||||||
|
|
||||||
then, when handling the request:
|
then, when handling the request:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow get /request/body
|
$ kapow get /request/body
|
||||||
foobar
|
foobar
|
||||||
@@ -294,7 +296,7 @@ Contains the status code given in the user response.
|
|||||||
|
|
||||||
If during the request handling:
|
If during the request handling:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow set /response/status 418
|
$ kapow set /response/status 418
|
||||||
|
|
||||||
@@ -310,7 +312,7 @@ Contains the value of the header ``name`` in the user response.
|
|||||||
|
|
||||||
If during the request handling:
|
If during the request handling:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow set /response/headers/X-My-Header Foo
|
$ kapow set /response/headers/X-My-Header Foo
|
||||||
|
|
||||||
@@ -324,12 +326,11 @@ value ``Foo``.
|
|||||||
Contains the value of the cookie ``name`` that will be set to the user
|
Contains the value of the cookie ``name`` that will be set to the user
|
||||||
response.
|
response.
|
||||||
|
|
||||||
|
|
||||||
**Sample Usage**
|
**Sample Usage**
|
||||||
|
|
||||||
If during the request handling:
|
If during the request handling:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow set /response/cookies/MYCOOKIE Foo
|
$ kapow set /response/cookies/MYCOOKIE Foo
|
||||||
|
|
||||||
@@ -346,7 +347,7 @@ Contains the value of the response HTTP body.
|
|||||||
|
|
||||||
If during the request handling:
|
If during the request handling:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow set /response/body foobar
|
$ kapow set /response/body foobar
|
||||||
|
|
||||||
|
|||||||
@@ -10,5 +10,5 @@ to.
|
|||||||
link routes to its section
|
link routes to its section
|
||||||
|
|
||||||
Each incoming request is matched against the routes in the route table in
|
Each incoming request is matched against the routes in the route table in
|
||||||
strict order, for each route in the route table, the criteria are checked.
|
strict order. For each route in the route table, the criteria are checked.
|
||||||
If the request does not match, the next route in the route list is examined.
|
If the request does not match, the next route in the route list is examined.
|
||||||
|
|||||||
@@ -6,10 +6,9 @@ the `User HTTP Interface`, and the details to handle it.
|
|||||||
|
|
||||||
*Kapow!* implements a *route table* where all routes reside.
|
*Kapow!* implements a *route table* where all routes reside.
|
||||||
|
|
||||||
|
|
||||||
A route can be set like this:
|
A route can be set like this:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: console
|
||||||
|
|
||||||
$ kapow route add \
|
$ kapow route add \
|
||||||
-X POST \
|
-X POST \
|
||||||
@@ -40,7 +39,7 @@ Uniquely identifies each route. It is used for instance by ``kapow route remove
|
|||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
The current implementation of *Kapow!* autogenerates a `UUID` for this field.
|
The current implementation of *Kapow!* autogenerates a `UUID` for this field.
|
||||||
In the future the use will be able to specify a custom value.
|
In the future the user will be able to specify a custom value.
|
||||||
|
|
||||||
|
|
||||||
``method`` Route Element
|
``method`` Route Element
|
||||||
@@ -48,7 +47,7 @@ Uniquely identifies each route. It is used for instance by ``kapow route remove
|
|||||||
|
|
||||||
Specifies the HTTP method for the route to match the incoming request.
|
Specifies the HTTP method for the route to match the incoming request.
|
||||||
|
|
||||||
The route shown above will only match a ``POST`` request.
|
Note that the route shown above will only match a ``POST`` request.
|
||||||
|
|
||||||
|
|
||||||
``url_pattern`` Route Element
|
``url_pattern`` Route Element
|
||||||
@@ -71,7 +70,7 @@ https://github.com/gorilla/mux#examples
|
|||||||
This sets the executable to be spawned, along with any arguments required.
|
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``,
|
In the route shown above, the entrypoint that will be run is ``/bin/bash -c``,
|
||||||
which is an incomplete recipe. It is completed by the `command` element.
|
which is an incomplete recipe. It is then completed by the `command` element.
|
||||||
|
|
||||||
.. todo::
|
.. todo::
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user