amaniquery-agent / docs /API_GATEWAY.md
Deployment
Automated deployment update
4b1daed
|
Raw
History Blame Contribute Delete
5.43 kB
# API Gateway for RAG Agent Framework
A production-ready, multi-protocol API Gateway for the AmaniQuery RAG Agent Framework. Provides unified access for frontend clients with comprehensive security, observability, and performance features.
## Architecture
![API Gateway Architecture](docs/images/api-gateway-architecture.png)
```mermaid
graph TB
subgraph "Client Layer"
WEB[Web Browser]
MOBILE[Mobile App]
DEVELOPER[Developer Portal]
end
subgraph "API Gateway Layer"
GW[API Gateway<br/>Go Service]
subgraph "Middleware Stack"
CORS[CORS Handler]
RATE[Rate Limiter]
AUTH[JWT Validator]
AUDIT[Audit Logger]
end
subgraph "Protocol Handlers"
REST[REST Handler]
WS[WebSocket Handler]
GQL[GraphQL Handler]
end
end
subgraph "Backend Services"
AGENT[Agent Service]
RETRIEVER[Retriever Service]
GENERATOR[Generator Service]
MEMORY[Memory Service]
end
WEB --> GW
MOBILE --> GW
DEVELOPER --> GW
GW --> CORS --> RATE --> AUTH --> AUDIT
AUDIT --> REST
AUDIT --> WS
AUDIT --> GQL
REST --> AGENT
WS --> AGENT
GQL --> AGENT
```
## Features
### Multi-Protocol Support
- **REST API** - Standard HTTP endpoints for queries, agents, memory
- **WebSocket** - Real-time streaming for query responses
- **Server-Sent Events** - Lightweight streaming alternative
- **GraphQL** - Flexible query interface (placeholder)
### Security
- **JWT Authentication** - Token-based auth with HMAC/RSA signing
- **OPA Authorization** - Fine-grained policy-based access control
- **Rate Limiting** - Token bucket with per-tenant/user isolation
- **CORS** - Configurable cross-origin policies
- **Security Headers** - HSTS, CSP, X-Frame-Options, etc.
### Observability
- **Prometheus Metrics** - Request counts, latencies, cache hits
- **OpenTelemetry Tracing** - Distributed request tracing
- **Audit Logging** - Structured logs for compliance
### Performance
- **Redis Caching** - Query response caching with smart TTL
- **Circuit Breakers** - Failure isolation per service
- **Connection Pooling** - Efficient gRPC connections
## Quick Start
### Prerequisites
- Go 1.21+
- Docker & Docker Compose
- Redis (for caching/rate limiting)
### Running Locally
```bash
# Clone the repository
cd AmaniQuery
# Copy example config
cp gateway.example.yaml gateway.yaml
# Run with Docker Compose
cd deployments/docker
docker-compose up -d api-gateway
```
### Configuration
See `gateway.example.yaml` for all options. Key settings:
```yaml
server:
bindAddr: ":8443"
auth:
jwtSecret: "${JWT_SECRET}"
cache:
redisAddr: "redis:6379"
```
Environment variables override config with `GATEWAY_` prefix.
## API Endpoints
### Queries
| Method | Path | Description |
|--------|------|-------------|
| POST | `/v2/queries` | Execute RAG query |
| GET | `/v2/queries/{id}` | Get async query result |
| WS | `/v2/queries/stream` | Streaming query |
### Agents
| Method | Path | Description |
|--------|------|-------------|
| POST | `/v2/agents` | Create agent |
| GET | `/v2/agents/{id}` | Get agent |
| DELETE | `/v2/agents/{id}` | Delete agent |
| POST | `/v2/agents/{id}/execute` | Execute plan |
### Memory
| Method | Path | Description |
|--------|------|-------------|
| GET | `/v2/memory/context` | Get context window |
| POST | `/v2/memory/sessions/{id}/consolidate` | Consolidate memory |
### Admin
| Method | Path | Description |
|--------|------|-------------|
| GET | `/admin/health` | Health check |
| GET | `/admin/metrics` | Prometheus metrics |
## WebSocket Protocol
```javascript
// Connect
const ws = new WebSocket('wss://api.example.com/v2/queries/stream?token=JWT');
// Send query
ws.send(JSON.stringify({
type: 'query',
payload: { query: 'What is RAG?', userId: 'user-123' }
}));
// Receive chunks
ws.onmessage = (e) => {
const msg = JSON.parse(e.data);
if (msg.type === 'chunk') console.log(msg.data);
if (msg.type === 'done') console.log('Complete');
};
```
## Deployment
### Docker
```bash
docker build -f deployments/docker/Dockerfile.gateway -t api-gateway .
docker run -p 8443:8443 api-gateway
```
### Kubernetes
```bash
kubectl apply -f deployments/k8s/gateway.yaml
```
## Project Structure
```
internal/gateway/
├── config.go # Configuration
├── gateway.go # Main server
├── types.go # Request/response types
├── cache/
│ └── cache.go # Redis cache
├── handlers/
│ ├── query.go # Query endpoints
│ ├── websocket.go # WebSocket streaming
│ ├── agent.go # Agent CRUD
│ ├── memory.go # Memory endpoints
│ ├── admin.go # Health/metrics
│ └── auth.go # Token endpoint
├── middleware/
│ ├── cors.go # CORS handling
│ ├── ratelimit.go # Rate limiting
│ ├── auth.go # JWT + OPA auth
│ ├── audit.go # Audit logging
│ └── tracing.go # OpenTelemetry
├── observability/
│ └── metrics.go # Prometheus metrics
└── services/
├── registry.go # Service discovery
└── clients.go # gRPC clients
```
## License
Apache 2.0