External Services
The following document is an abstract overview of our architecture and how contractors / external businesses
can build services to hook ito our platform. An accompanying document will be provided with API calls
and
events
the external contractor/business will be interested in.
Tools
We are a language agnostic team however hold the following preferences.
backend services
- Scala
- Ruby
- Node
- PHP
frontend services
- React
- insert here duane?
data storage
- CassandraDB or Postgres.
Integration
Kafka
All our services communicate with each other through Kafka. Services will publish events and each service will consume the events they are interested in. External service being built will also need to publish specific events.
Requirements
Services may broadcast past events at any time for new services to build it's own state.
It is therefore essential when working with an event sourced distributed system that the following criteria is met in order to avoid side effects.
- Each service needs to know whether or not it has already processed the event.
- Each service needs the ability to replay events from a specific offset time.
API
User management
All users will be logged in to our user service which will return a JWT token. Each external service will
be given a secret key in order to decode the JWT token and validate whether it is valid. The service should throw
a Forbidden 403 HTTP error. Tokens for reOS staff will include a validSupportStaff
Bool.
API calls
Additional API calls will be made available to external services when going through Kafka does not make sense. These calls will be left to the discretion of the devops team.
Devops and deployment
The deployment of external applications will be code reviewed and deployed from our in-house devops team.