APIs

Data model

A config is just an String id and a json value :

{
  "id": "my:id", 
  "value": "A value"
}

CRUD API

Configs expose a classic CRUD REST api :

List all

curl -X GET \
  'http://localhost:9000/api/configs?pattern=*&page=1&pageSize=15' \
  -H 'Content-Type: application/json' \
  -H 'Izanami-Client-Id: xxxx' \
  -H 'Izanami-Client-Secret: xxxx' | jq

Will respond with a 200 status code:

{
  "results": [
    {
      "id": "ragnar:lodbrok:email",
      "value": {"email": "ragnar.lodbrok@gmail.com"}
    }
  ],
  "metadata": {
    "page": 1,
    "pageSize": 15,
    "count": 1,
    "nbPages": 1
  }
}

The query params are optional and the value used in this example are the default one.

Create a config

curl -XPOST \
    'http://localhost:9000/api/configs' \
    -H 'Content-Type: application/json' \
    -H 'Izanami-Client-Id: xxxx' \
    -H 'Izanami-Client-Secret: xxxx' \
    -d '{ "id": "ragnar:lodbrok:city", "value": {"city": "Kattegat"} }' | jq  

Will respond with a 201 status code:

{
  "id": "ragnar:lodbrok:city",
  "value": {"city": "Kattegat"}
}

Get a config

curl -X GET \
  'http://localhost:9000/api/configs/ragnar:lodbrok:city' \
  -H 'Content-Type: application/json' \
  -H 'Izanami-Client-Id: xxxx' \
  -H 'Izanami-Client-Secret: xxxx' | jq

Will respond with a 200 status code:

{
  "id": "ragnar:lodbrok:city",
  "value": {
    "city": "Kattegat"
  }
}

Update a config

curl -X PUT \
  'http://localhost:9000/api/configs/ragnar:lodbrok:city' \
  -H 'Content-Type: application/json' \
  -H 'Izanami-Client-Id: xxxx' \
  -H 'Izanami-Client-Secret: xxxx' \
  -d '{ "id": "ragnar:lodbrok:city", "value": {"city": "Northumbria"} }' | jq

Will respond with a 200 status code:

{
  "id": "ragnar:lodbrok:city",
  "value": {
    "city": "Northumbria"
  }
}

Patch a config

Partial updates can be done using json patch :

curl -X PATCH \
  'http://localhost:9000/api/configs/ragnar:lodbrok:city' \
  -H 'Content-Type: application/json' \
  -H 'Izanami-Client-Id: xxxx' \
  -H 'Izanami-Client-Secret: xxxx' \
  -d '[{"op": "replace", "path": "/value", "value": {"city": "Northumbria"} }]' | jq

Will respond with a 200 status code:

{
  "id": "ragnar:lodbrok:city",
  "value": {
    "city": "Northumbria"
  }
}

Delete a config

curl -X DELETE \
  'http://localhost:9000/api/configs/ragnar:lodbrok:city' \
  -H 'Content-Type: application/json' \
  -H 'Izanami-Client-Id: xxxx' \
  -H 'Izanami-Client-Secret: xxxx' | jq 

Will respond with a 200 status code:

{
  "id": "ragnar:lodbrok:city",
  "value": {
    "city": "Northumbria"
  }
}

Tree API

The tree api format the response as tree. Be careful using this API because the results are not paged so be sure to use an appropriate pattern :

For example if we create this datas :

curl -XPOST \
    'http://localhost:9000/api/configs' \
    -H 'Content-Type: application/json' \
    -H 'Izanami-Client-Id: xxxx' \
    -H 'Izanami-Client-Secret: xxxx' \
    -d '{ "id": "ragnar:lodbrok:city", "value": "{\"city\": \"Kattegat\"}" }' | jq

curl -XPOST \
    'http://localhost:9000/api/configs' \
    -H 'Content-Type: application/json' \
    -H 'Izanami-Client-Id: xxxx' \
    -H 'Izanami-Client-Secret: xxxx' \
    -d '{ "id": "ragnar:lodbrok:email", "value": "\"ragnar.lodbrok@gmail.com\"" }' | jq

And then use the tree APIs

curl -X GET \
  'http://localhost:9000/api/tree/configs?pattern=ragnar:*' \
  -H 'Content-Type: application/json' \
  -H 'Izanami-Client-Id: xxxx' \
  -H 'Izanami-Client-Secret: xxxx' | jq

We will get the following response:

{
  "ragnar": {
    "lodbrok": {
      "city": {
        "city": "Kattegat"
      },
      "email": {
        "email": "ragnar.lodbrok@gmail.com"
      }
    }
  }
}

As you can see, the keys are split with : and the json and the json values are expended into a tree representation.

Download and Upload

Download and upload is done using the nd-json format.

Download

curl -X GET \
  'http://localhost:9000/api/configs.ndjson' \
  -H 'Content-Type: application/json' \
  -H 'Izanami-Client-Id: xxxx' \
  -H 'Izanami-Client-Secret: xxxx' | jq

Will return each item separated by a \n.

{
  "id": "ragnar:lodbrok:city",
  "value": {"city": "Northumbria"}
}
{
  "id": "ragnar:lodbrok:email",
  "value": {"email": "ragnar.lodbrok@gmail.com"}
}

Upload

curl -X POST \
  'http://localhost:9000/api/configs.ndjson' \
  -H 'Content-Type: application/nd-json' \
  -H 'Izanami-Client-Id: xxxx' \
  -H 'Izanami-Client-Secret: xxxx' \
  -d '{ "id": "ragnar:lodbrok:city", "value": {"city": "Northumbria"}" } 
      {"id": "ragnar:lodbrok:email", "value": {"email": "ragnar.lodbrok@gmail.com"}}' \
   | jq 

Will return

{
  "success": 2,
  "errors": {
    "errors": [],
    "fieldErrors": {}
  }
}
The source code for this page can be found here.