π Multilingual FAQ API
A production-style backend service for managing FAQs with real-time dynamic language translations. Built with TypeScript, Express, MongoDB, and Redis, designed with high reliability, security, observability, and containerized deployment best practices in mind.
π Key Highlights & Architecture
- Versioned API Architecture (
/api/v1): Clean separation between application routes and runtime bootstrapping (app.tsvsindex.ts). - Async Dynamic Translation: In-process translation queue supporting retry logic for seamless multi-language target rendering.
- Fault-Tolerant Redis Caching: Automatic caching & cache invalidation with graceful fallbackβthe core API continues serving requests reliably even if Redis is down.
- Security Hardening: Protected with Helmet headers, express-rate-limit abuse protection, strict CORS allowlist, request size constraints, and HTTP Basic authentication for sensitive admin endpoints.
- Strict Input Validation: End-to-end Zod schemas for query parameters, request bodies, and database mutations.
- Full Observability: Structured JSON logging powered by Pino, unique request ID tracing, latency monitoring, and Prometheus-compatible metrics endpoint (
/api/v1/metrics). - Health & Readiness Probes: Built-in
/api/v1/healthand/api/v1/readyendpoints suitable for Kubernetes/Docker container orchestration. - Interactive Documentation: Interactive OpenAPI 3.0 UI rendered via Swagger at
/docs.
π οΈ Tech Stack
| Layer | Technology |
|---|---|
| Runtime & Language | Node.js, TypeScript |
| Framework | Express.js |
| Database & ODM | MongoDB, Mongoose |
| Caching Layer | Redis (redis client v4) |
| Validation & Security | Zod, Helmet, Express Rate Limit |
| Logging & Metrics | Pino, Pino-HTTP, Custom Latency/Metrics |
| API Specs | Swagger UI Express (/docs) |
| Containerization & CI | Docker, Docker Compose, GitHub Actions |
| Testing | Jest, Supertest, MongoDB Memory Server |
π API Endpoints
Public & System Endpoints (/api/v1)
GET /api/v1/faqsβ Retrieve list of FAQs (supportslang,page,limit,search,sortBy,sortOrder).POST /api/v1/faqsβ Create a new FAQ entry (triggers async translation).GET /api/v1/clear-cacheβ Invalidate cached FAQ data.GET /api/v1/healthβ Liveness check.GET /api/v1/readyβ Readiness check (verifying DB & Redis connectivity).GET /api/v1/metricsβ Export operational metrics.GET /docsβ Interactive Swagger UI documentation.
Admin Endpoints (HTTP Basic Auth)
GET /api/v1/admin/faqsβ View all FAQs with admin controls.POST /api/v1/admin/faqsβ Admin creation endpoint.POST /api/v1/admin/faqs/:idβ Update existing FAQ.POST /api/v1/admin/faqs/:id/deleteβ Delete FAQ entry and invalidate cache.
π» Quick Start & Commands
1. Clone & Install
code
git clone https://github.com/Rahul-Sahani04/multilang-faq-api.git
cd multilang-faq-api
npm install2. Environment Configuration
code
cp .env.example .env3. Build & Run
code
# Development mode
npm run dev
# Production build & run
npm run build
npm run start4. Running with Docker Compose
code
docker-compose up --build5. Running Tests & Linting
code
npm run test
npm run lint