At IZEA we have a set of services that power the IZEA ecosystem and Unity Suite. For this project, we would like you to build a link shortening service. This service will use some of the technology we use in our reference architecture.
If any special requirements have been conveyed to you from your interview team, they supercede the following.
- Create a web service in either Ruby or Node.js.
- The service should provide a route to create new links.
- A new link should specify a
target_url. - The route should respond with an
id,tiny_url, andtarget_url.
- A new link should specify a
- The service should also provide a route that looks up
tiny_urland redirects totarget_url.- As an example,
http://your.service/{tiny_url}.
- As an example,
- You can assume that the constratints on
tiny_urlare as follows:- Must be a constant number of characters in length.
- Must use an alphabet that is easily encoded.
- Your submission should be packaged as a Docker container.
- Your submission must contain a
README.mdthat contains instructions on how to build, test, and run your service. - If youre service requires any additional services (like a database, etc) please use
docker-composeto orchestrate.
- Design of the service's API, including paths, structure, and format is up to you.
- Descisions on code structure and frameworks is also up to you.
At IZEA, we all have different skills, areas of interest, and expertese. We believe this makes us a better engineering organization. The following are a set of optional bonus specializations that you can add to your submission.
- Create an
Ember.jsfront end for the admistrative component of the service (creation of links, etc).
- A major retailer has decided to use your service for a large promotional campaign. It will have to handle thousands of requests per second. How are you going to handle this volume?
- You have been tasked with creating clicks stream analytics for the traffic coming through your service. How would you set this up?
- You have been given the additional requirement that your
tiny_urlsequence should be such that, given anytiny_url, an attacker couldn't (trivially) predict what the nexttiny_urlwould be. - An ideal solution would require O(1) storage, and O(1) compute.