This server does a few things:
abp
/
: Displays the state using Three.jsgraph/
:
GET
returns JSON representing the statePOST
accepts JSON in the same format and overwrites the state in memorydoc/
: Shows this pageIf you do an HTTPS GET against /graph
, you will receive some JSON.
:::bash
$ curl https://abv.peteshadbolt.co.uk/graph
outputs
:::python
{"node":
{"30":
{"position":
{"y": 3.245091885135617, "x": -1.0335390368621762, "z": 0.12485495696298532}, "vop": 0}, "28":
{"position":
{"y": 0.1811335599620998, "x": 3.7102305790943295, "z": 0.3375519427305571}, "vop": 0}, "29":
{"position":
{"y": -1.834182888403804, "x": 1.5968911365745622, "z": 2.8585980299131886
...
The top-level keys are node
and adj
. These model the node metadata and adjacency matrix respectively.
Each node
has
position
({x:<> y:<> z:<>}
)vop
(integer, ignore for now)color
, label
, etc.adj
uses the same data structure as networkx
to efficiently represent sparse adjacency matrices. For each key i
in adj
, the value of adj[i]
is itself a map whose keys j
correspond to the ids of nodes connected to i
. The value of adj[i][j]
is a map which is usually empty but which could be used to store metadata about the edge.
Here's an example of a graph (A-B C)
:
:::python
{'adj': {0: {1: {}}, 1: {0: {}}, 2: {}},
'node': {
0: {'position': {'x': 0, 'y': 0, 'z': 0}, 'vop': 0},
1: {'position': {'x': 1, 'y': 0, 'z': 0}, 'vop': 0},
2: {'position': {'x': 2, 'y': 0, 'z': 0}, 'vop': 10}}}
The underlying graph library is based on Anders’ and Briegel's method. Full docs for the Python library are here.