Portfolio

FastAPI in Action: Handling 100k Requests with Ease

Industry: SaaS Infrastructure / Data-as-a-Service
Developed for developers and data teams requiring a reliable, battle-tested API interface for retrieving search engine data without managing complex proxy infrastructure or browser fingerprinting.

Problem

Building a scalable search API isn't just about scraping; it's a concurrency and reliability nightmare.
  • Concurrency Bottlenecks: Handling 100,000+ daily requests requires non-blocking I/O; synchronous frameworks choke under this load.
  • API Reliability: Downstream providers (search engines) are hostile; without sophisticated retry logic and circuit breakers, error rates spike above 50%.
  • Latency Requirements: Clients expect JSON responses in milliseconds, but parsing HTML is CPU-intensive. Balancing I/O-bound fetching with CPU-bound parsing is difficult.
  • Traffic Management: Without strict rate-limiting and validation, bad actors can degrade service quality for all tenants.

Solution

A high-performance, asynchronous REST API built on FastAPI that acts as a resilient middleware between clients and hostile data sources.
  • Asynchronous Microservice: Architected using FastAPI and Uvicorn to handle thousands of concurrent connections with a non-blocking event loop.
  • Traffic Shaping Layer: Integrated Redis to implement sliding-window rate limiting and caching. Hot queries are served from cache (15ms latency), while heavy users are throttled to protect infrastructure.
  • Robust Middleware: Custom aiohttp middleware handles connection pooling, automatic retries with exponential backoff, and "Bad Proxy" pruning, ensuring a 99.9% success rate for client requests.
  • Strict Schema Validation: Utilized Pydantic models to enforce strict request/response contracts. Clients receive predictable, typed JSON 100% of the time, with detailed error messages for malformed requests.

Tech Stack

  • Framework: FastAPI (Python)
  • Concurrency: Asyncio & AIOHTTP
  • Infrastructure: Docker & Redis (Caching/Rate Limiting)
  • Validation: Pydantic (Data Contracts)
  • Testing: Pytest (Integration & Unit testing)

Results

  • Throughput: Successfully scaled to process 100,000+ requests/day with sub-800ms average latency for non-cached queries.
  • Efficiency: Redis caching reduced upstream traffic cost by 30% by serving repeated queries from memory.
  • Reliability: Achieved 99.95% API uptime during peak load tests through robust error handling and containerized deployment.
Complex web engineering & SaaS