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:
- List the key non-functional requirements (eg low latency, scalability, reliability, etc.)...
API Design
Define the APIs expected from the system. This is your chance to analyze and define the read and write paths so that you can come up with the high-level design...
POST /link - takes long URL, generates short URL, saves to database, and returns short URL
GET /[shortened URL key] - returns 301 code with long URL
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.
- UI for user to enter and submit the long URL
- server running API to handle requests
- database to store URLs
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.
Database - NoSQL database for speed since records are very basic and main functionality does not require joins. Shortened URL key is partition key
Server - API with 2 primary endpoints: POST /link and GET /[id]. Post /link accepts a long URL and returns the generated, persisted short URL. GET /[id] takes the key from the short URL and returns the long URL from the database as a 301 response