Building an Application Handler
In this section, you’ll find how to add new application integrations to MindsDB.
Prerequisite
You should have the latest staging version of the MindsDB repository installed locally. Follow this guide to learn how to install MindsDB for development.
What are API Handlers?
Application handlers act as a bridge between MindsDB and any application that provides APIs. You use application handlers to create databases using the CREATE DATABASE
statement. So you can reach data from any application that has its handler implemented within MindsDB.
Database Handlers
To learn more about handlers and how to implement a database handler, visit our doc page here.
ML Handlers
To learn more about handlers and how to implement a machine learning (ML) handler, visit our doc page here.
Creating an Application Handler
You can create your own application handler within MindsDB by inheriting from the APIHandler
class.
By providing the implementation for some or all of the methods contained in the APIHandler
class, you can interact with the application APIs.
Core Methods
Apart from the __init__()
method, there are five core methods that must be implemented. We recommend checking actual examples in the codebase to get an idea of what goes into each of these methods, as they can change a bit depending on the nature of the system being integrated.
Let’s review the purpose of each method.
Method | Purpose |
---|---|
_register_table() | It registers the data resource in memory. For example, if you are using Twitter API it registers the tweets resource from /api/v2/tweets . |
connect() | It performs the necessary steps to connect/authenticate to the underlying system. |
check_connection() | It evaluates if the connection is alive and healthy. |
native_query() | It parses any native statement string and acts upon it (for example, raw syntax commands). |
call_application_api() | It calls the application API and maps the data to pandas DataFrame. This method handles the pagination and data mapping. |
Authors can opt for adding private methods, new files and folders, or any combination of these to structure all the necessary work that will enable the core methods to work as intended.
Other Common Methods
Under the mindsdb.integrations.utilities
library, contributors can find various methods that may be useful while implementing new handlers.
API Table
Once the data returned from the API call is registered using the _register_table()
method, you can use it to map to the APITable
class.
The APITable
class provides CRUD methods.
Method | Purpose | |
---|---|---|
select() | It implements the mappings from the ast.Select and calls the actual API through the call_application_api . | |
insert() | It implements the mappings from the ast.Insert and calls the actual API through the call_application_api . | |
update() | It implements the mappings from the ast.Update and calls the actual API through the call_application_api . | |
delete() | It implements the mappings from the ast.Delete and calls the actual API through the call_application_api . | |
add() | Adds new row to the data dictionary. | |
list() | List data based on certain conditions by providing FilterCondition, limits, sorting and target fields. | |
get_columns() | It maps the data columns returned by the API. |
Implementation
Each application handler should inherit from the APIHandler
class.
Here is a step-by-step guide:
-
Implementing the
__init__()
method:This method initializes the handler.
-
Implementing the
connect()
method:The
connect()
method sets up the connection. -
Implementing the
check_connection()
method:The
check_connection()
method performs the health check for the connection. -
Implementing the
native_query()
method:The
native_query()
method runs commands of the native API syntax. -
Implementing the
call_application_api()
method:This method makes the API calls. It is not mandatory to implement this method, but it can help make the code more reliable and readable.
The connection_args
Dictionary
The connection_args
dictionary contains all of the arguments used to establish the connection along with their descriptions, types, labels, and whether they are required or not.
Here is an example of the connection_args
dictionary from the GitHub handler:
The connection_args_example
Dictionary
The connection_args_example
dictionary contains an example of all required arguments to establish the connection.
Here is an example of the connection_args_example
dictionary from the GitHub handler.
Exporting All Required Variables
The following should be exported in the __init__.py
file of the handler:
- The
Handler
class. - The
version
of the handler. - The
name
of the handler. - The
type
of the handler, eitherDATA
handler orML
handler. - The
icon_path
to the file with the database icon. - The
title
of the handler or a short description. - The
description
of the handler. - The
connection_args
dictionary with the connection arguments. - The
connection_args_example
dictionary with an example of the connection arguments. - The
import_error
message that is used if the import of theHandler
class fails.
A few of these variables are defined in another file called __about__.py
. This file is imported into the __init__.py
file.
Here is an example of the __init__.py
file for the GitHub handler.
The __about__.py
file for the same GitHub handler contains the following variables:
Check out our Application Handlers!
To see some integration handlers that are currently in use, we encourage you to check out the following handlers inside the MindsDB repository:
And here are all the handlers available in the MindsDB repository.