Flow Repository
Introduction
The Flow Repository is responsible for storing, retrieving and updating the integration flows. Additionally, it is used to start and stop existing integration flows.
Technologies used
MongoDB: MongoDB is used as the Flow Repository’s storage solution.
How it works
Integration Flows
An integration flow is described by a JSON document, containing all information required to run the flow. The core of each integration flow is its graph, containing nodes and edges. Data is passed along between nodes in the direction indicated by the edges. For (a minimal) example:
{
"name": "Example Integration Flow",
"description": "Transfers data from the example origin to the example destination",
"graph": {
"nodes": [
{
"id": "step_1",
"name": "An example origin"
},
{
"id": "step_2",
"name": "An example destination"
}
],
"edges": [
{
"source": "step_1",
"target": "step_2"
}
]
}
}
Note that in practice, most nodes will have additional fields, such as what component they use or secrets/arguments to be used by that component.
For a full overview of the integration flow schema and further examples, please refer to the Models section in the API Reference.
Flow Repository API
The Flow Repository offers a REST API through which flows can be stored, retrieved, updated, started, and stopped. To interact with this API, the user must supply a valid bearer token generated by the Identity Management.
List of supported Methods and Routes
endpoint | method | description | comments |
---|---|---|---|
/flows | GET | Returns a list of all integration flows the user owns | See the section “Ownership and Permissions” for further details |
/flows | POST | Stores a new integration flow | The supplied flow data is automatically validated for completeness and errors |
/flows/{id} | GET | Returns one particular integration flow by ID | |
/flows/{id} | DELETE | Deletes an integration flow by ID | Flow may not be currently active |
/flows/{id} | PATCH | Updates an integration flow with new data | Flow may not be currently active |
/flows/{id}/start | POST | Starts an integration flow | See the section “Interaction with other Services” for further details |
/flows/{id}/stop | POST | Stops an integration flow | See the section “Interaction with other Services” for further details |
For further details and examples, please refer to the API Reference
Ownership and Permissions
Each integration flow contains an arbitrarily long array of owners. An integration flow can only be accessed if the current user (as identified by their bearer token) is among those owners.
Additionally, manipulation of flows is further limited by the permissions of the current user. There are separate permissions for viewing, posting/updating, and starting/stopping integration flows. For further information about permissions, please refer to the documentation of the Identity Management.
Interaction with other Services
The Flow Repository interacts with these Services:
-
Identity Management: The Flow Repository relies on a bearer token supplied by the Identity Management to determine which integration flows the current user may see, and which actions they may take.
-
Component Orchestrator: Whenever an integration flow is started or stopped, the Flow Repository notifies the Component Orchestrator to take the necessary actions. Conversely, when an integration flow successfully becomes active or inactive, the Component Orchestrator notifies the Flow Repository of this change.
-
Message Oriented Middleware: The Flow Repository uses the Message Oriented Middleware to send and receive updates about the current status (starting/stopping/active/inactive) of integration flows.
-
Component Repository: Components used in an integration flow are specified as references to documents in the Component Repository.
-
Template Repository: If a flow is generated from a template, it will contain a fromTemplate reference to the generating template in the Template Repository.
-
Secret Service: If an integration flow uses sensitive data (such as login credentials), this data can be securely and opaquely stored in the Secret Service and then referenced.