Denodo - Using the Built-In REST Service

Summary of Denodo’s built-in REST service.

There are several ways to access views in Denodo. The most common methods are to use JDBC or ODBC, but another method is to use Denodo’s built in REST service. This method is especially useful when accessing Denodo for lightweight applications, like Python applications. All Denodo views get a corresponding REST service automatically. While it is possible to create Data Services to implement more specific requirements that also use web protocols, you do not need to create or deploy a dedicated Data Service to use the REST service for a given view.

The Denodo REST service uses Basic with VDP authentication. In other words, when authenticating, simply use the same username and password that you would when logging into Denodo. This applies to both personal accounts and service/application accounts.

Official documentation for Denodo’s REST service

Accessing Views via URL (Swagger page)

A Swagger page is an interactive, web-based documentation interface that allows developers to visualize and test REST APIs. You can reach the Denodo REST Swagger page with the following URL: https://[ServerName]:9443/denodo-restfulws/

  • Example (Denodo Development environment): https://urbdenododev2.admin.uillinois.edu:9443/denodo-restfulws/

To see all records of a view using the Swagger page, simply navigate to a VDB, to a view of your choice, and click it. Below is an example of the logical_data_warehouse.

Alternatively, you can use the following URL format to access a view directly: https://urbdenododev2.admin.uillinois.edu:9443/denodo-restfulws/[VDB]/views/[ViewName]

  • Example (Denodo Development environment): https://urbdenododev2.admin.uillinois.edu:9443/denodo-restfulws/logical_data_warehouse/views/t_rs_time

Searching Views via URL (Swagger page)

To search (filter) the view, click the search link. Add your filter or output criteria and click search at the bottom.

Results:

As you may have noticed, the Swagger search page adds parameters to the URL when you add search criteria. These parameters can be manipulated manually or programmatically as well.

For example, let’s say you want to search the t_rs_time table for all registration snapshot records for the 120268 term_cd (as in the previous example). You can do that with the following URL. The yellow highlighted part below is the filter.

  • https://urbdenododev2.admin.uillinois.edu:9443/denodo-restfulws/logical_data_warehouse/views/t_rs_time?term_cd=120268

Changing Output Format

The default output format of the Denodo REST service is HTML. HTML representation is useful for testing as it is human readable, but applications will likely want to use JSON or XML.

To output the results as JSON, add the $format=json parameter to the end of the URL. As an example, we'll use the URL above, just output in JSON format instead of HTML:

Results:

Using the Denodo REST Service with Python

One of the most useful use cases for the Denodo REST service is when developing a data driven application. While you can consume the Denodo REST service from virtually any programming language, we’ve included a code snippet for Python below.

The following code snippet assumes that credentials and the Denodo REST URL are stored as environment variables. The code snippet calls the REST service and displays the results in a data frame.

import os

import requests

import pandas as pd

from dotenv import load_dotenv

from requests.auth import HTTPBasicAuth

import logging

import sys

 

load_dotenv()

 

USERNAME = os.getenv('DEN_USER')

PASSWORD = os.getenv('DEN_PASS')

BASE_URL = os.getenv('DEN_API_URL')

def fetch_api_data():

    headers = {

        'Accept': 'application/json',

        'User-Agent': 'python-requests/2.31.0' # Some servers block empty user-agents

    }

    try:

        response = requests.get(

            BASE_URL,

            auth=HTTPBasicAuth(USERNAME, PASSWORD),

            headers=headers,

            timeout=10,

            verify=False

        )

        data = response.json()

         # Denodo packs rows inside 'elements'

        df = pd.DataFrame(data.get('elements', []))

        row_count = len(df)

        return df

    except Exception as err:

        print(f"An error occurred: {err}")

# Execute and view the first 5 rows

df = fetch_api_data()

if df is not None:

    display(df.head())



Keywords:
Denodo API REST 
Doc ID:
161720
Owned by:
Alex H. in UI Training Hub
Created:
2026-06-03
Updated:
2026-06-04
Sites:
University of Illinois Training Hub