Exercise: LotsToDo
The goal of this exercise is to explore building REST-ful APIs that may eventually be exposed to a large scale
of requests. To have a fun discussion around this problem, you will build the simple API described below. The
functionality of the API allows clients to create & track lists of TODO
items assigned to a given user
.
In general, the API supports the following HTTP interactions:
HTTP Verb | Path | Description |
---|---|---|
POST | /users |
Create a new User |
GET | /users/{user-id} |
Get a specific User |
POST | /users/{user-id}/todos |
Create a new TODO Item for a specific User |
GET | /users/{user-id}/todos |
Get the list of all TODO Items for a specific User |
PUT | /users/{user-id}/todos/{todo-id} |
Update the data in a specific TODO Item |
DELETE | /users/{user-id}/todos/{todo-id} |
Remove a specific TODO item |
All requests and responses should use JSON for Content-Type
.
How To Build This
You are welcome to use whatever language(s), runtime(s), data store(s), and framework(s) you would like. This should be fun. The end product just needs to be accessible via HTTP on the local network. If you prefer to deploy to an external service, that's great too.
Some considerations to factor into your choices here are:
- You should limit the time spent building the API to a few hours
- We will review the initial implementation together and discuss design trade offs
- We will exercise your implementation with a reasonable scale of concurrent requests
- If it performs well, we will increase the scale of requests and discuss the impact
Some Suggestions
To keep things simple, feel free to set some explicit limitations to the functionality of your implementation. For example, the following are all perfectly valid limitations:
- A
User
can be represented with anid
and aname
- A
TODO Item
can be represented with anid
, atitle
, abody
, and adone
flag - No Authentication or Authorization
- A maximum number of 100 TODO items that can be associated with a given user
- No pagination for the list of TODO items
Have fun!