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