Request Lifecycle

Detailed flow of API requests through Appizer's system

Detailed visualization of how API requests are processed through Appizer's system.infrastructure.

Complete Request Flow

API Request Lifecycle

From client request to database storage

Related Documentation:

Request Phases

1. Authentication

Every request must include a valid API key:

headers: {
  'Authorization': 'Bearer sk_live_abc123...',
  'Content-Type': 'application/json'
}

Authentication Flow

How API keys are validated

Related Documentation:

2. Validation

Request payload is validated against schema:

Checks performed:

  • Required fields present
  • Data types correct
  • Values within allowed ranges
  • Payload size within limits
// Validation rules
{
  event: { type: 'string', required: true, maxLength: 100 },
  userId: { type: 'string', required: false, maxLength: 255 },
  properties: { type: 'object', required: false, maxSize: 10000 }
}

3. Rate Limiting

Requests are checked against rate limits:

Rate Limiting

Token bucket algorithm

Related Documentation:

Default limits:

  • 1000 requests per minute
  • 10,000 events per hour
  • Burst capacity: 100 requests

4. Queueing

Valid requests are queued for async processing:

// Queue message format
{
  id: 'msg_abc123',
  timestamp: '2024-01-15T10:30:00Z',
  payload: {
    event: 'purchase_completed',
    userId: 'user_123',
    properties: { amount: 99.99 }
  },
  metadata: {
    apiKey: 'sk_***',
    ip: '192.168.1.1',
    userAgent: 'Mozilla/5.0...'
  }
}

5. Processing

Events are processed asynchronously:

Enrichment

Add geo-location, device info, and timestamps

Transformation

Normalize data formats and apply business rules

Validation

Final validation before storage

Storage

Write to database with indexes

Cache Update

Update real-time metrics cache

6. Response

Client receives immediate acknowledgment:

{
  "success": true,
  "eventId": "evt_abc123",
  "timestamp": "2024-01-15T10:30:00Z"
}

Error Handling Flow

Error Handling

How errors are processed and returned

Related Documentation:

Performance Characteristics

Latency Breakdown

PhaseTypical LatencyNotes
Authentication5-10msCached lookups
Validation2-5msSchema validation
Rate limiting1-2msIn-memory check
Queueing5-10msMessage queue write
Total (sync)15-30msClient receives response
Processing50-100msAsync, not blocking
Storage20-50msDatabase write
Total (async)70-150msEvent fully processed

Throughput

  • Single event: 1,000 requests/sec
  • Batch events: 25,000 events/sec
  • Peak capacity: 100,000 events/sec

Retry Logic

Failed requests are automatically retried:

Retry Strategy

Exponential backoff with jitter

Related Documentation:

Retry configuration:

  • Max retries: 4
  • Initial delay: 1 second
  • Backoff multiplier: 2x
  • Max delay: 60 seconds
  • Jitter: ±20%

Monitoring

Track request lifecycle metrics:

// Metrics collected
{
  requestId: 'req_abc123',
  phases: {
    authentication: { duration: 8, status: 'success' },
    validation: { duration: 3, status: 'success' },
    rateLimiting: { duration: 1, status: 'success' },
    queueing: { duration: 7, status: 'success' },
    processing: { duration: 85, status: 'success' }
  },
  totalDuration: 104,
  status: 'completed'
}

Best Practices

Client-Side

  1. Implement timeouts: Don't wait indefinitely
  2. Handle 202 responses: Request accepted, processing async
  3. Retry on failures: Use exponential backoff
  4. Batch when possible: Reduce request overhead

Server-Side

  1. Validate before sending: Catch errors early
  2. Use idempotency keys: Prevent duplicates
  3. Monitor latency: Track performance
  4. Log request IDs: Aid debugging

Next Steps