Skip to content

ockhamlabs/trino-openapi

 
 

Repository files navigation

Trino OpenAPI

Build Status

This is a Trino plugin that provides a connector to read from and write to HTTP APIs given an OpenAPI specification.

Quick Start

To run a Docker container with the connector, run the following:

docker run \
  -d \
  --name trino-openapi \
  -e OPENAPI_SPEC_LOCATION=http://api.example/api/spec.yaml \
  -e OPENAPI_BASE_URI=http://api.example/api/v1 \
  -p 8080:8080 \
  nineinchnick/trino-openapi:1.10

Then use your favourite SQL client to connect to Trino running at http://localhost:8080

Usage

Download one of the ZIP packages, unzip it and copy the trino-openapi-1.10 directory to the plugin directory on every node in your Trino cluster. Create a openapi.properties file in your Trino catalog directory and set all the required properties.

connector.name=openapi
spec-location=http://api.example/api/spec.yaml
base-uri=http://api.example/api/v1
authentication.type=http
authentication.username=${ENV:OPENAPI_USERNAME}
authentication.password=${ENV:OPENAPI_PASSWORD}

After reloading Trino, you should be able to connect to the openapi catalog.

Configuration

Configuration property Container environmental variable Description
spec-location OPENAPI_SPEC_LOCATION URL or filename containing the OpenAPI specification, either JSON or YAML
base-uri OPENAPI_BASE_URI Base URL for the API, often includes API version
authentication.type OPENAPI_AUTH_TYPE Default authentication type if not set in the specification. One of: none, http, api_key, oauth.
authentication.scheme OPENAPI_AUTH_SCHEME Authentication scheme for the http authentication type. One of: basic, bearer.
authentication.token-endpoint OPENAPI_TOKEN_ENDPOINT OAuth token endpoint URL
authentication.client-id OPENAPI_CLIENT_ID OAuth Client ID
authentication.client-secret OPENAPI_CLIENT_SECRET OAuth Client secret
authentication.grant-type OPENAPI_GRANT_TYPE OAuth grant type
authentication.username OPENAPI_USERNAME Username used for the http and oauth authentication types
authentication.password OPENAPI_PASSWORD Password used for the http and oauth authentication types
authentication.bearer-token OPENAPI_BEARER_TOKEN Bearer token for http authentication
authentication.api-key-name OPENAPI_API_KEY_NAME API key name
authentication.api-key-value OPENAPI_API_KEY_VALUE API key value

The connector is using the Airlift HTTP client, which can be configured with additional properties prefixed with openApi, like so:

openApi.http-client.log.enabled=true
openApi.http-client.log.path=logs

Known APIs

This connector has been tested with the following APIs. The Docker image includes additional catalog files that will be used if the first of their environmental variable is set.

Name Environmental variables
OpenAPI Petstore PETSTORE_URL
Starburst Galaxy GALAXY_URL, GALAXY_TOKEN
Jira Cloud platform JIRA_URL
GitHub REST API GITHUB_TOKEN

Build

Run all the unit tests:

mvn test

Creates a deployable zip file:

mvn clean package

Unzip the archive from the target directory to use the connector in your Trino cluster.

unzip target/*.zip -d ${PLUGIN_DIRECTORY}/
mv ${PLUGIN_DIRECTORY}/trino-openapi-* ${PLUGIN_DIRECTORY}/trino-openapi

Debug

To test and debug the connector locally, run the OpenApiQueryRunner class located in tests:

mvn test-compile exec:java -Dexec.mainClass="pl.net.was.OpenApiQueryRunner" -Dexec.classpathScope=test

And then run the Trino CLI using trino --server localhost:8080 --no-progress and query it:

trino> show catalogs;
 Catalog
---------
 openapi
 system
(2 rows)

trino> show tables from openapi.default;
   Table
------------
 single_row
(1 row)

trino> select * from openapi.default.single_row;
 id |     type      |  name
----+---------------+---------
 x  | default-value | my-name
(1 row)

About

Trino connectors for accessing APIs with an OpenAPI spec

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 98.6%
  • Other 1.4%