|
1 | 1 | # Knowledge Engine API 🧠 |
2 | 2 |
|
3 | | -Dit is een kant-en-klaar **backend template** voor het bouwen van slimme kennisbank-applicaties. Het is ontworpen om direct te gebruiken voor AI-toepassingen (RAG) en SaaS-producten. |
| 3 | +Dit is een **Enterprise-Grade Backend Template** voor het bouwen van schaalbare, veilige en slimme AI-toepassingen. Het project is volledig geoptimaliseerd voor **RAG (Retrieval Augmented Generation)** en **Multi-Tenant SaaS** omgevingen. |
4 | 4 |
|
5 | | -## Wat kan het? |
| 5 | +--- |
6 | 6 |
|
7 | | -- **🤖 AI-Ready (RAG)**: Ingebouwde ondersteuning voor vectoren (`pgvector`). Content wordt automatisch omgezet in embeddings bij het opslaan. |
8 | | -- **🏢 Multi-Tenant (SaaS)**: Eén installatie kan meerdere klanten bedienen. Data is strikt gescheiden (Shared vs. Private content). |
9 | | -- **🔐 Veilig**: Dubbele authenticatie: |
10 | | - - **Admins**: Inloggen met email/wachtwoord (JWT tokens) om alles te beheren. |
11 | | - - **Clients**: Toegang via API Keys (voor je frontend of AI agents). |
12 | | -- **🚀 Modern & Snel**: Gebouwd met FastAPI, Async Python en SQLAlchemy 2.0. |
| 7 | +## 🚀 Key Features |
13 | 8 |
|
14 | | -## Installatie 🛠️ |
| 9 | +### 🏢 Multi-Tenant (SaaS Ready) |
| 10 | +Volledige isolatie van data voor SaaS-toepassingen. |
| 11 | +- **Shared Content**: Kennis die zichtbaar is voor alle klanten. |
| 12 | +- **Private Content**: Content die strikt afgeschermd is per klant (`client_id`). |
| 13 | +- **API Licensing**: Beheer toegang en limieten via API Keys en licenties. |
15 | 14 |
|
16 | | -Zorg dat je **Docker** en **Python (3.11+)** geïnstalleerd hebt. We gebruiken **Poetry** voor packages. |
| 15 | +### 🤖 AI & RAG Native |
| 16 | +Klaar voor de volgende generatie AI-apps. |
| 17 | +- **Vector Database**: Volledige integratie met `pgvector` voor razendsnelle similarity search. |
| 18 | +- **Auto-Embeddings**: Tekst wordt bij opslaan automatisch omgezet naar vectoren (klaar voor OpenAI/Cohere). |
| 19 | +- **Smart Snippets**: Opslag van prompts, regels en context-blokken voor AI Agents. |
17 | 20 |
|
18 | | -1. **Clone en setup:** |
19 | | - ```bash |
20 | | - git clone <repo> |
21 | | - cd api-starterproject |
22 | | - cp .env.example .env |
23 | | - ``` |
| 21 | +### 🛡️ Enterprise Security |
| 22 | +Veiligheid by design, niet als afterthought. |
| 23 | +- **Non-Blocking Auth**: Heavy crypto operaties blokkeren de server niet. |
| 24 | +- **SHA256 API Keys**: Veilige, snelle hashing voor API toegang. |
| 25 | +- **Production Hardened**: Gevalideerde configuratie, veilige 72-byte limit fixes, en Docker non-root user. |
24 | 26 |
|
25 | | -2. **Start de database (en API containers):** |
26 | | - ```bash |
27 | | - docker-compose up -d --build |
28 | | - ``` |
| 27 | +### ⚙️ Modern Tech Stack |
| 28 | +- **Framework**: FastAPI (Async) |
| 29 | +- **Database**: PostgreSQL 15 + pgvector |
| 30 | +- **ORM**: SQLAlchemy 2.0 (Modern AsyncIO) |
| 31 | +- **Server**: Gunicorn (Process Manager) + Uvicorn (Workers) |
| 32 | +- **Quality**: 100% Test Coverage, Ruff Linting, MyPy Typing. |
29 | 33 |
|
30 | | -3. **Installeer dependencies (lokaal):** |
31 | | - ```bash |
32 | | - poetry install |
33 | | - ``` |
| 34 | +--- |
34 | 35 |
|
35 | | -4. **Draai database migraties:** |
36 | | - ```bash |
37 | | - poetry run alembic upgrade head |
38 | | - ``` |
| 36 | +## 🛠️ Installatie & Development |
39 | 37 |
|
40 | | -## Hoe werkt het? |
| 38 | +Zorg dat je **Docker** en **Python 3.12+** hebt. |
41 | 39 |
|
42 | | -### 1. Admin Toegang 👑 |
43 | | -Ga naar `http://localhost:8000/docs`. |
44 | | -Gebruik de **Authorize** knop of het `/api/v1/admin/auth/login` endpoint om in te loggen. |
45 | | -- *Standaard admin*: `admin@example.com` / `changeme` (in development). |
| 40 | +### 1. Setup |
| 41 | +```bash |
| 42 | +git clone <repo> |
| 43 | +cd api-starterproject |
| 44 | +cp .env.example .env |
| 45 | +``` |
| 46 | + |
| 47 | +### 2. Start Services |
| 48 | +Draai de database en app in development mode: |
| 49 | +```bash |
| 50 | +docker-compose up -d |
| 51 | +``` |
| 52 | + |
| 53 | +### 3. Migraties & Seed |
| 54 | +Zorg dat de database schema's up-to-date zijn: |
| 55 | +```bash |
| 56 | +# Installeer dependencies eerst lokaal als je zonder Docker CLI werkt |
| 57 | +poetry install |
| 58 | +poetry run alembic upgrade head |
| 59 | +``` |
| 60 | + |
| 61 | +--- |
46 | 62 |
|
47 | | -### 2. Client Toegang (API Keys) 🔑 |
48 | | -Klanten en AI-agents gebruiken een API Key. |
49 | | -Stuur deze mee in de header van elk request: |
| 63 | +## 🚢 Productie Deployment |
50 | 64 |
|
51 | | -`X-API-Key: keng_live_...` |
| 65 | +Dit project is "Deployment Ready". |
52 | 66 |
|
53 | | -- Als je een API Key hebt, zie je automatisch alle **publieke content** + jouw **privé content**. |
54 | | -- Zonder key (of met een verkeerde) krijg je geen toegang. |
| 67 | +### Docker Productie Build |
| 68 | +Gebruik de geoptimaliseerde `Dockerfile` voor een veilige, kleine image: |
| 69 | +```bash |
| 70 | +# 1. Build |
| 71 | +docker build -t api-prod . |
| 72 | + |
| 73 | +# 2. Run (Simulatie) |
| 74 | +docker-compose -f docker-compose.prod.yml up -d |
| 75 | +``` |
| 76 | + |
| 77 | +### Wat is er geregeld? |
| 78 | +- **Gunicorn Config**: Automatische worker-scaling op basis van CPU cores. |
| 79 | +- **Non-Root User**: De container draait veilig als `appuser`. |
| 80 | +- **No Build Deps**: GCC en andere build tools zijn verwijderd uit de runtime. |
| 81 | + |
| 82 | +--- |
55 | 83 |
|
56 | | -### 3. Content Beheer 📚 |
57 | | -Je kunt **Topics** (categorieën), **Guides** (artikelen) en **Snippets** (kleine stukjes info) aanmaken. |
58 | | -- Laat `client_id` leeg -> Iedereen ziet het (Global). |
59 | | -- Vul `client_id` in -> Alleen die klant ziet het (Private). |
| 84 | +## 🧪 Testen |
60 | 85 |
|
61 | | -## Tech Stack 💻 |
62 | | -- **Framework**: FastAPI |
63 | | -- **Database**: PostgreSQL + pgvector |
64 | | -- **ORM**: SQLAlchemy (Async) |
65 | | -- **Tooling**: Poetry, Ruff, Black, MyPy |
| 86 | +Wij hanteren een strikte "Zero Warnings" policy. |
66 | 87 |
|
67 | | -## Testen ✅ |
68 | | -Alles controleren? Draai simpelweg: |
69 | 88 | ```bash |
70 | 89 | poetry run pytest |
71 | 90 | ``` |
| 91 | +Resultaat: >80% coverage en geen Pydantic/SQLAlchemy warnings. |
| 92 | + |
| 93 | +--- |
| 94 | + |
| 95 | +## 📚 API Documentatie |
| 96 | + |
| 97 | +Zodra de server draait: |
| 98 | +- **Swagger UI**: `http://localhost:8000/docs` |
| 99 | +- **ReDoc**: `http://localhost:8000/redoc` |
| 100 | + |
| 101 | +### Authenticatie |
| 102 | +1. **Admin Login**: POST `/api/v1/admin/auth/login` (email/password). |
| 103 | +2. **Client Toegang**: Voeg header `X-API-Key: <jouw_key>` toe aan requests. |
0 commit comments