Link

prod

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.

API Reference Implementation

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.

  • 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.