Integreat

Integreat is a translator between services and data sources of different kinds. It's a gateway API, an integration layer, or an adapter for your APIs – depending on how you use it. 100 % TypeScript.

This documentation is very much work in progress and is written for the 0.8 release of Integreat.

The basic idea of Integreat is to make it easy to define a set of data sources and expose them through a well defined interface, to abstract away the specifics of each service, and map their data to defined schemas.

This is done through these basic building blocks:

  • Schemas: Define some common data shapes, that all incoming and outgoing data are mapped to and from

  • Transformers: Transform data from one state to another, e.g. from XML to plain JavaScript objects, from a date string to a date, text manipulation, etc.

  • Mappings: Use json paths and transformers to mutate incoming data to a common schema, and from the schema to what another service is expecting

  • Transporters: Transfer data to and from the different services (the most common is http)

  • Service definitions: Set up a service, with the right transporter, authentications, and mappings

  • Flows: Define a sequence of actions to execute, triggered by incoming requests, data changes, or time schedules

  • dispatch() function: Sends requests as actions to the right services via a router and internal action handlers

With these building blocks, it is possible to set up Integreat in different ways, e.g.:

  • As a gateway API, where incoming requests are relayed to one or more services, hiding the implementation details of each service

  • As a sync job, where data are retrieved from one service and sent to another, at set intervals or triggered by a hook or a change log, etc.

  • As a cacher, where incoming requests fetches data from a storage service, that is being populated with data from other services on a schedule or by demand

Integreat is built with an "everything is a service" philosophy, so whether you set up a local storage or database, a mapping to a legacy, proprietary system or a state-of-the-art open API, or you build a uniform gateway API, you use the same building blocks. Defining a GraphQL API as a front to your setup, is not very different from how you define the mapping to the SOAP API and the CSV files on a FPT server in the back.

Last updated