Service Design Specification
BFF Service Documentation
Version:
1.0
Scope
This document provides a comprehensive architectural overview of the BFF Service, a Backend-for-Frontend layer designed to unify access to backend ElasticSearch indices and event-driven aggregation logic. The service offers a full REST API suite and listens to Kafka topics to synchronize enriched views.
This document is intended for:
- Architects ensuring integration patterns and event consistency.
- Developers building on top of or consuming the BFF service.
- DevOps Engineers responsible for deployment and environment setup.
For endpoint-level specifications, refer to the REST API Guide. For listener-level behavior, refer to the Event API Guide.
Service Settings
-
Port: Configurable via
HTTP_PORT, default:3000 - ElasticSearch: Primary storage and query engine
-
Kafka Broker:
KAFKA_BROKERfor aggregation sync -
Mindbricks Injected Interface: Configured with
api-face -
Dynamic REST Routes: Powered via codegen with
/<indexName>structure
API Routes Overview
The BFF service exposes a dynamic REST API interface that provides full access to ElasticSearch indices. These include list, count, filter, and schema-based interactions for both stored and virtual views.
For full documentation of REST routes, including supported methods and examples, refer to the REST API Guide.
Kafka Event Listeners
The BFF service listens to ElasticSearch-related Kafka topics to
maintain enriched and denormalized indices. These listeners
trigger view aggregation functions upon receiving
create,
update, or
delete
events for primary and related entities.
For detailed behavior, payloads, and listener-to-function mappings, refer to the Event Guide.
Aggregation Strategy
Each view is either:
- Stored View: materialized into a separate ElasticSearch index
- Virtual View: dynamically aggregated on request
For each stored view:
-
viewNameAggregateData(id)handles source rehydration -
Aggregates are executed via
aggregateNameAggregateDataFromIndex() -
Lookups via
lookupNameLookupDataFromIndex() -
Stats via
statNameStatDataFromIndex()
Final document is saved to:
<project_codename>_<view.newIndexName>
Middleware
Error Handling
-
ApiErrorextends native error -
errorConverterensures consistent error format -
errorHandleroutputs error JSON with stack trace in development
Request Validation
-
validate()uses Joi + custom schema per route - Filters and pagination are schema-validated
-
Filter operators supported:
eq,noteq,range,wildcard,match, etc.
Async Wrapper
-
catchAsync(fn)auto-handles exceptions in async route handlers
Elasticsearch Utilities
-
Index Management: create, check, delete
-
Document Operations: get, create, update, delete
-
Query Builders:
-
queryBuilder()for filters -
searchBuilder()for full-text queries -
aggBuilder()for terms aggregations
-
-
Multi-index search support with
multiSearchBuilder() -
Dynamic Schema Extraction via
fieldBuilder()
Cron Repair Logic
Runs periodically to ensure data integrity:
-
runAllRepair()triggers eachviewNameRepair() -
For each view:
-
Reads base index with
match_all - Re-runs aggregation pipeline
- Indexes final result into enriched view index
-
Reads base index with
Environment Variables
| Variable | Description |
|---|---|
HTTP_PORT
|
Service port |
KAFKA_BROKER
|
Kafka broker host |
ELASTIC_URL
|
Elasticsearch base URL |
CORS_ORIGIN
|
Allowed frontend origin (optional) |
NODE_ENV
|
Environment (dev, prod) |
SERVICE_URL
|
Used for injected API face config |
SERVICE_SHORT_NAME
|
Used in injected auth URL |
App Lifecycle
-
Loads env:
.env,.prod.env, etc. -
Bootstraps Express app with:
- CORS setup
- JSON + cookie parsers
- Dynamic routes
- Swagger and API Face
-
Starts:
- Kafka listeners
- Cron repair jobs
- Full enrichment pipelines
-
Handles SIGINT to close server cleanly
Testing Strategy
Unit Tests
- Aggregation methods per view
- Joi schemas
- Custom middleware (errors, async, pick)
Integration Tests
- REST APIs (mock Elastic)
- Kafka event triggers → view enrichment
Load Tests (Optional)
-
GET
/index/listwith filters - Event storm on Kafka topics
- Cron job load verification