Skip to main content
Version: Next

Performance Overview

RBIH APIs implement sophisticated rate limiting and performance management to ensure fair usage, system stability, and optimal performance for all users. This guide covers optimization strategies and best practices for efficient API integration.

Rate Limiting Structure

RBIH APIs use a multi-tiered rate limiting approach:

  • Per-Client Limits: Overall API usage per client
  • Per-Endpoint Limits: Specific limits for individual API endpoints
  • Per-Service Limits: Service-specific rate limits based on external dependencies
  • Burst Limits: Short-term burst allowances for peak usage

Environment-Specific Limits

Sandbox Environment

  • Global: 100 requests/minute
  • Identity Services: 50 requests/minute
  • Financial Services: 30 requests/minute
  • Burst Allowance: 20 requests in 10 seconds

Production Environment

  • Global: 1000 requests/minute
  • Identity Services: 500 requests/minute
  • Financial Services: 300 requests/minute
  • Burst Allowance: 100 requests in 10 seconds

Rate Limit Headers

All API responses include rate limiting information:

HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 75
X-RateLimit-Reset: 1642345678
X-RateLimit-Window: 60
X-RateLimit-Type: per-minute

Quick Performance Tips

1. Request Batching

Use batch endpoints when available instead of multiple individual requests.

2. Intelligent Caching

Cache responses based on data volatility:

  • Identity data: 24 hours
  • Financial data: 6 hours
  • Land records: 7 days
  • Agricultural data: 30 days

3. Connection Reuse

Implement HTTP connection pooling for high-volume applications.

4. Retry Strategy

Use exponential backoff with jitter for failed requests.

Performance Monitoring

Key Metrics to Track

  • Response Time: API call duration
  • Error Rate: Percentage of failed requests
  • Rate Limit Usage: Current vs available quota
  • Cache Hit Rate: Effectiveness of caching strategy

Basic Monitoring Setup

class PerformanceMonitor {
constructor() {
this.metrics = {
totalRequests: 0,
totalErrors: 0,
totalResponseTime: 0,
rateLimitHits: 0
};
}

recordRequest(responseTime, success) {
this.metrics.totalRequests++;
this.metrics.totalResponseTime += responseTime;

if (!success) {
this.metrics.totalErrors++;
}
}

getStats() {
const { totalRequests, totalErrors, totalResponseTime } = this.metrics;

return {
averageResponseTime: totalRequests > 0 ? totalResponseTime / totalRequests : 0,
errorRate: totalRequests > 0 ? totalErrors / totalRequests : 0,
totalRequests
};
}
}

Next Steps