doc: initial REST API doc draft
This commit is contained in:
parent
7f558d1523
commit
9bbdb6f983
|
@ -0,0 +1,166 @@
|
||||||
|
The Icinga Director REST API
|
||||||
|
============================
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
------------
|
||||||
|
|
||||||
|
Icinga Director has been designed with a REST API in mind. Most URLs you
|
||||||
|
can access with your browser will also act as valid REST url endpoints.
|
||||||
|
|
||||||
|
Base Headers
|
||||||
|
------------
|
||||||
|
All your requests MUST have a valid accept header. The only acceptable
|
||||||
|
variant right now is `application/json`, so please always append a header
|
||||||
|
as follows to your requests:
|
||||||
|
|
||||||
|
Accept: application/json
|
||||||
|
|
||||||
|
|
||||||
|
Authentication
|
||||||
|
--------------
|
||||||
|
Please use HTTP authentication and any valid Icinga Web 2 user, granted
|
||||||
|
enough permissions to accomplish the desired actions. The restrictions
|
||||||
|
and permissions that have been assigned to web users will also be enforced
|
||||||
|
for API users. In addition, the permission `director/api` is required for
|
||||||
|
any API access.
|
||||||
|
|
||||||
|
Versioning
|
||||||
|
----------
|
||||||
|
|
||||||
|
Many REST APIs include version strings in their URLs, Icinga Director
|
||||||
|
doesn't. We will try hard to not break compatibility with future versions.
|
||||||
|
Sure, sooner or later we also might be forced to introduce some kind of
|
||||||
|
versioning. But who knows? So we decided to not pollute our beautiful URLs
|
||||||
|
with ugly extensions like /v1/.
|
||||||
|
|
||||||
|
As a developer you can trust us to not remove any existing REST url or any
|
||||||
|
provided property. However, you must always be ready to accept new properties.
|
||||||
|
|
||||||
|
URL scheme and supported methods
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
POST director/host
|
||||||
|
gives 201 on success
|
||||||
|
GET director/host?name=hostname.example.com
|
||||||
|
PUT director/host?name=hostname.example.com
|
||||||
|
gives 200 ok on success and 304 not modified on no change
|
||||||
|
DELETE director/host?name=hostname.example.com
|
||||||
|
gives 200 on success
|
||||||
|
|
||||||
|
|
||||||
|
First example request with CURL
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl -H 'Accept: application/json' \
|
||||||
|
-u 'username:password' \
|
||||||
|
'https://icinga.example.com/icingaweb2/director/host?name=hostname.example.com'
|
||||||
|
```
|
||||||
|
|
||||||
|
Should I use HTTPS?
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Sure, absolutely, no doubt. There is no, absolutely no reason to NOT use
|
||||||
|
HTTPS these days. Especially not for a configuration tool allowing you to
|
||||||
|
configure check commands that are going to be executed on all your servers.
|
||||||
|
|
||||||
|
Icinga Objects
|
||||||
|
--------------
|
||||||
|
|
||||||
|
### Special parameters
|
||||||
|
|
||||||
|
#### Resolve object properties
|
||||||
|
|
||||||
|
In case you add the `resolve` parameter to your URL, all inherited object
|
||||||
|
properties will be resolved. Such a URL could look as follows:
|
||||||
|
|
||||||
|
director/host?name=hostname.example.com&resolve
|
||||||
|
|
||||||
|
|
||||||
|
#### Retrieve all properties
|
||||||
|
|
||||||
|
Per default properties with `null` value are skipped when shipping a result.
|
||||||
|
You can influence this behavior with the properties parameter. Just append
|
||||||
|
`properties=ALL` to your URL:
|
||||||
|
|
||||||
|
director/host?name=hostname.example.com&properties=all
|
||||||
|
|
||||||
|
|
||||||
|
#### Retrieve only specific properties
|
||||||
|
|
||||||
|
The `properties` parameter also allows you to specify a list of specific
|
||||||
|
properties. In that case, only the given properties will be returned, even
|
||||||
|
when they have no (`null`) value:
|
||||||
|
|
||||||
|
director/host?name=hostname.example.com&properties=object_name,address,vars
|
||||||
|
|
||||||
|
|
||||||
|
Example
|
||||||
|
-------
|
||||||
|
|
||||||
|
director/host?name=pe2015.example.com&json
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"address": "127.0.0.3",
|
||||||
|
"check_command": null,
|
||||||
|
"check_interval": null,
|
||||||
|
"display_name": "pe2015 (example.com)",
|
||||||
|
"enable_active_checks": null,
|
||||||
|
"flapping_threshold": null,
|
||||||
|
"groups": [ ],
|
||||||
|
"imports": [
|
||||||
|
"generic-host"
|
||||||
|
],
|
||||||
|
"retry_interval": null,
|
||||||
|
"vars": {
|
||||||
|
"facts": {
|
||||||
|
"aio_agent_build": "1.2.5",
|
||||||
|
"aio_agent_version": "1.2.5",
|
||||||
|
"architecture": "amd64",
|
||||||
|
"augeas": {
|
||||||
|
"version": "1.4.0"
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
director/host?name=pe2015.example.com&json&resolved
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"address": "127.0.0.3",
|
||||||
|
"check_command": "tom_ping",
|
||||||
|
"check_interval": "60",
|
||||||
|
"display_name": "pe2015 (example.com)",
|
||||||
|
"enable_active_checks": true,
|
||||||
|
"groups": [ ],
|
||||||
|
"imports": [
|
||||||
|
"generic-host"
|
||||||
|
],
|
||||||
|
"retry_interval": "10",
|
||||||
|
"vars": {
|
||||||
|
"facts": {
|
||||||
|
"aio_agent_build": "1.2.5",
|
||||||
|
"aio_agent_version": "1.2.5",
|
||||||
|
"architecture": "amd64",
|
||||||
|
"augeas": {
|
||||||
|
"version": "1.4.0"
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
TODO
|
||||||
|
----
|
||||||
|
|
||||||
|
Return Last-Modified und ETag header?
|
||||||
|
-> If-Modified-Since -> mtime?
|
||||||
|
-> If-Unmodified-Since -> mtime
|
||||||
|
|
||||||
|
|
||||||
|
SHA1 sum as ETag? For PUT and DELETE:
|
||||||
|
-> If-Match -> SHA1 sum as ETag?!
|
||||||
|
-> If-None-Match -> SHA1 sum as ETag?!
|
||||||
|
|
||||||
|
|
||||||
|
304, 412
|
||||||
|
|
Loading…
Reference in New Issue