Requirements


Functional Requirements:


  • Create a short URL for a given long URL.
  • Return the long URL associated with a given short URL.



Non-Functional Requirements:


  • Low latency (Redirection should happen less than 500ms)
  • High Availability
  • Unique short url for every long url
  • High Scalability (Storing mapping of Long URL to short URL)


API Design

  1. POST - v1/tinyurl (POST API Request that has Long URL sent as part of request Body, which will provide a short URL using which user can hit)
  2. GET - v1/tinyurl/{shortUrlKey} (GET API request with short Url Key in path param, which will redirect to the Long URL with 302 redirection request)



High-Level Design

Describe the overall system architecture. Identify the main components needed to solve the problem end-to-end. Use the diagramming tool to create a block diagram.





Detailed Component Design

Deep dive into 2-3 key components. Explain how they work, how they scale, discuss tradeoffs, capacity, and any relevant algorithms or data structures.