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...
createShortUrl: // POST request
createShortUrlRequest: { longUrl: string, userId: string }
createShortUrlResponse: { shortUrl: string, longUrl: string, userId: string, error: Error | null }
getLongUrl // GET
getLongUrlRequest: { shortUrl: string }
getLongUrlResponse: { longUrl: string, shortUrl: string, userId: string, error: Error | null }
getShortUrl // GET
request: { longUrl: string, userId: string }
response: { shortUrl: string, longUrl: string, userId: string, error: Error | null }
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.
Deep dive into 2-3 key components. Explain how they work, how they scale, discuss tradeoffs, capacity, and any relevant algorithms or data structures.