Custom APIs
This helps create custom APIs to use for 3rd party integrations by using corridor package.
The user would define additional flask-applications which would be mounted along with Corridor API.
This option is useful if the 3rd party application is not python based, and therefore can't use the corridor
package directly
Utility
There are scenarios when the user wants to use a 3rd party application which fetches the details
about the objects on the platform. To accomplish that, the user can create a simple Flask application,
and register the corresponding APIs. These APIs would use the corridor package to fetch the
required information. This new FLASK app would be mounted along with the corridor-api application,
and we would internally register those API endpoints along with the rest of corridor-api endpoints.
Example
The example focuses on creating a GET api to fetch information about all the models to which a given user has
access to. The 3rd party application can specify the username as part of the headers with the key: x-user-name.
The endpoint in this case would be: http://localhost:5000/{CUSTOM_APP_NAME}/models, assuming corridor-api is running
on port: 5000.
The user can optionally provide prefix kwarg in the configurations, in which case the endpoint would become:
http://localhost:5000/{prefix}/models
CUSTOM_APP_NAME = 'customtool'
from flask import Flask, request
custom_app = Flask(CUSTOM_APP_NAME)
@app.route('/models', methods=['GET'])
def models():
import corridor
from corridor_api import AppUser
username = request.headers.get('x-user-name')
with AppUser(username):
models = corridor.Model.models
models_info = {}
for model in models:
model_obj = corridor.Model(name=model)
model_id = model_obj.id
models_info[model_id] = {
'modelId': model_id,
'modelName': model_obj.name,
'modelVersion': model_obj.version,
'modelType': model_obj.type,
'outputAlias': model_obj.output_alias,
'createdBy': model_obj.created_by,
'current_status': model_obj.current_status,
}
return {'result': models_info}
Note
The user, for which we want to fetch the information, needs to be passed in the headers.
AppUser sets the user context for us, so that only the information accessible to that user is fetched.
Configurations
Custom APIs related configurations need to be set in api_config.py along with other configurations.
CUSTOM_APIS = {
CUSTOM_APP_NAME: {'prefix': 'optional_prefix_to_add_to_the_endpoint', 'app': custom_app},
}