1) Convert long url to short url
2) Make sure we have only unique short urls
3) Implement a cache for urls which gets called at least 10 times a day
4) Implement a sign in account token using google account
1) list down the urls created by the user in User Interface
2) Number of avg users per day
3) Number of avg requests per day
1) The user should be able to create at least 5 free short urls per day
2) Free short urls time duration is 90 days and then it will automatically delete
3) Paid version allow users to store shorts as long they are subscribed
4) Paid version allow users to create atleast 1000 short urls per day
5) Should be horizontal space which means we will be adding new servers if space is used completely
6) using load balancer, we will distribute the load to unused servers
Define what APIs are expected from the system...
We will use Get, Post, Put, Delete operation
1) For GET operation, it will be like this
url: https://urlshorter.com/{username}/urls
will give
{
'username': 'username',
'id': 'username1',
'urls': [
{
'id': 'url1id'
'shorturl': 'shorturl1',
'originalurl': 'originalurl1',
'createdDate': 'dd/mm/yyyy:hr:min:sec',
'isPremium': true,
'expiryDate': '',
'editedDate':''
},
{
'url': 'shorturl2',
'id': 'url2id',
'originalurl': 'originalurl2',
'createdDate': 'dd/mm/yyyy:hr:min:sec',
'isPremium': true,
'expiryDate': '',
'editedDate':''
}
]
}
2) For PUT operation, we can update the API through id
url format would be
url:
first PUT operation - https://urlshorter.com/{username}/{shorturl} and the response body would
{
'url': 'nameshortUrl',
'originalurl': 'originalurl2',
}
the url object
{
'url': 'shorturl2',
'originalurl': 'originalurl2',
'createdDate': 'dd/mm/yyyy:hr:min:sec',
'isPremium': true,
'expiryDate': '',
'editedDate':'dd/mm/yyyy:hr:min:sec'
}
would become
{
'url': 'nameshortUrl',
'originalurl': 'originalurl2',
'createdDate': 'dd/mm/yyyy:hr:min:sec',
'isPremium': true,
'expiryDate': '',
'editedDate':'dd/mm/yyyy:hr:min:sec'
}
3) For POST operation, we can update the API through id
url format would be
url:
POST operation - https://urlshorter.com/{username} and the response body would be
{
'url': 'nameshortUrl',
'originalurl': 'originalurl2',
}
would return this
{
'url': 'nameshortUrl',
'originalurl': 'originalurl2',
'createdDate': 'dd/mm/yyyy:hr:min:sec',
'isPremium': true,
'expiryDate': '',
'editedDate':''
}
4) For delete operation, url would be
https://urlshorter.com/{username}/{shorturlname}
Defining the system data model early on will clarify how data will flow among different components of the system. Also you could draw an ER diagram using the diagramming tool to enhance your design...
You should identify enough components that are needed to solve the actual problem from end to end. Also remember to draw a block diagram using the diagramming tool to augment your design. If you are unfamiliar with the tool, you can simply describe your design to the chat bot and ask it to generate a starter diagram for you to modify...
Explain how the request flows from end to end in your high level design. Also you could draw a sequence diagram using the diagramming tool to enhance your explanation...
Dig deeper into 2-3 components and explain in detail how they work. For example, how well does each component scale? Any relevant algorithm or data structure you like to use for a component? Also you could draw a diagram using the diagramming tool to enhance your design...
Explain any trade offs you have made and why you made certain tech choices...
Try to discuss as many failure scenarios/bottlenecks as possible.
What are some future improvements you would make? How would you mitigate the failure scenario(s) you described above?