Data Sources Declarative Interface

Declarative API

Check high-level overview of the Declarative API Interface first. To see the entire API specification, visit API reference.

Manage data sources

Next to an entity interface where user can manage each data source individually, there is also declarative interface allowing all data sources including their physical model to be managed at once. The endpoint is

  • /api/layout/dataSources.

Whenever you upload a new data sources layout with its physical models, all the existing will be completely deleted.

Passwords consideration

Passwords of users in data sources can be stored using declarative interface, but they can’t be retrieved back in any way. There is no support to reuse a password from an existing data source with the same identifier during a replace/update procedure.

Once uploaded a new data sources layout without passwords, previously stored passwords are removed. You can repeat the upload with passwords filled in or update particular data source with password using the entity api.

When uploading a data source layout then both or none of the user and password must be specified.

Examples

First, be aware of your application endpoint. For Helm Chart deployment, it represents the https://<organization-hostname> value. For the All-in-One docker image, the default endpoint is http://localhost:3000.

In the following examples:

  • the endpoint is substituted by $ENDPOINT variable;

Retrieve all data sources

Taking into account the password consideration the output is suitable for backup.

curl -H "Authorization: Bearer YWRtaW46Ym9vdHN0cmFwOmFkbWluMTIz" \
  $ENDPOINT/api/layout/dataSources > data-sources-layout.json

Restore all data sources

Taking into account the password consideration you can use payload previously retrieved from this endpoint.

curl -H "Authorization: Bearer YWRtaW46Ym9vdHN0cmFwOmFkbWluMTIz" \
  -H "Content-Type: application/json" \
  -X PUT \
  $ENDPOINT/api/layout/dataSources -d @data-sources-layout.json

Data source declarative document

The physical model in the example is truncated and the password is replaced by a dummy value.

{
  "dataSources": [
    {
      "id": "pg_local_docker-demo",
      "name": "pg_local_docker-demo",
      "pdm": {
        "tables": [
          {
            "columns": [
              {
                "dataType": "STRING",
                "isPrimaryKey": false,
                "name": "category"
              },
              {
                "dataType": "INT",
                "isPrimaryKey": true,
                "name": "product_id"
              },
              {
                "dataType": "STRING",
                "isPrimaryKey": false,
                "name": "product_name"
              }
            ],
            "id": "products",
            "path": [
              "products"
            ],
            "type": "VIEW"
          }
        ]
      },
      "schema": "demo",
      "type": "POSTGRESQL",
      "url": "jdbc:postgresql://postgres:5432/tiger",
      "username": "postgres",
      "password": "<password>"
    } 
  ]
}

You can also use data sources layout with an empty physical model.

{
  "dataSources": [
    {
      "id": "pg_local_docker-demo",
      "name": "pg_local_docker-demo",
      "pdm": {
        "tables": []
      },
      "schema": "demo",
      "type": "POSTGRESQL",
      "url": "jdbc:postgresql://postgres:5432/tiger",
      "username": "postgres",
      "password": "<password>"
    }
  ]
}