API¶
The RESTful API can be found [not implemented].
Philosophy¶
The API is designed following these guidelines:
The HTTP Status code reflects the result of the API call.
- Some people think that HTTP status code should reflect the result of the pipe (the HTTP request itself), and that’s cool too. But that’s not what this project will use.
API errors are returned with various
4xx
HTTP status codes and have a JSON payload that attempts to follow RFC8707.PUT
cannot create new resources.Using
POST
to create a resource will return the new resource.POST
for verbs (none exist yet) will not return anything.PUT
,PATCH
, andDELETE
will not return any data. It’s up to the end user to decide if they want compare old and new values. Typically this might look like:import requests old = requests.get("/metric/2") requests.patch("/metric/2" json={"units": "new_units"}) new = requests.get("/metric/2") # Find the differences diff = {"old": {}, "new": {}} for item in old.keys(): diff['old'][item] = old[item] diff['new'][item] = new[item]
With a few exceptions, it’s up to the end user to determine which ID to act on. The API is not “smart” with regards to ID-like strings. For example, to delete the metric named
foo.bar
:import requests # You can't do this. Sorry! obj = requests.get("/metric/foo.bar") # instead you must do this (or similar): obj = request.get("/metric?name=foo.bar")['results'][0] rv = request.delete("/metric/{}".format(obj['metric_id'])) assert rv.status_code == 204