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...
An API for creating a tweet:
POST /tweet
{
"text"
"userID"
}
An API with different query parameters for searching:
GET /tweets?from={t}&to={t}
GET /tweets?term={s}
GET /tweets?user={u}
where t is a timestamp, and s is a search term, and u is a userID
A basic API to retrieve a single tweet:
GET /tweet/tweetID
An API to increase like count:
PUT /like/tweetID
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.
We have a few key pieces of the 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.