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
- 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)
- 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.