In this exercise, you are going to extend the REST APIs you have been building to handle DELETE and PUT requests. You will also learn how to make your route handling more modular in express using express.Router.
- Use Express.Router to encapsulate routing behavior for different resources
- Explain and build a CRUD RESTful JSON API including PUT and DELETE
- Fork this repository
- Clone the forked repository onto your local machines
- In the root directory, type
npm install
, which installs dependencies for the project - Finally, type
npm start
, which starts a development server that will reload whenever you make any changes to source files
Your instructor will demonstrate how to encapsulate route parameters for the /users
endpoints using express.Router and also implement the PUT
and DELETE
endpoints for user.
- Implement the
films
andbooks
endpoints for this API according to the API spec - Move
films
andbooks
routes into their own routes files
- Implement a
PATCH
method onbooks
andfilms
so that the client can update a subset of fields, rather than all of them. - Implement the following validation rules:
- The client should not be able to get, delete, or update a film that doesn't exist
- The client should not be able to add a film or book if one with the same title already exists
- When making a POST request, the client must specify a value for all required fields
- When any of these checks fail, have your API return an appropriate HTTP response code and error message.
- Use the express documentation to find out how to return different HTTP response codes.
Example Request
curl localhost:3030/users
Example Response
{
"users": [
{
"id": 1,
"email": "edward@mail.com"
},
{
"id": 2,
"email": "nathan@mail.com"
},
{
"id": 3,
"email": "mike@mail.com"
}
]
}
Example Request
curl localhost:3030/users/2
Example Response
{
"user": {
"id": 2,
"email": "nathan@mail.com"
}
}
For Windows users, replace the \
with ^
Example Request
curl -X POST localhost:3030/users \
-H 'Content-Type: application/json' \
-d '{"email":"test@test.com"}'
Example Response
{
"user": {
"email": "test@test.com",
"id": 4
}
}
Example Request
curl -X DELETE localhost:3030/users/4
Example Response
{
"user": {
"email": "test@test.com",
"id": 4
}
}
Example Request
curl -X PUT localhost:3030/users/4 \
-H 'Content-Type: application/json' \
-d '{"email":"test@test.com"}'
Example Response
{
"user": {
"email": "test@test.com",
"id": 4
}
}
Example Request
curl localhost:3030/films
Example Response
{
"films": [
{
"id": 1,
"title": "Bonnie and Clyde",
"director": "Arthur Penn"
},
{
"id": 2,
"title": "Reservoir Dogs",
"director": "Quentin Tarantino"
},
{
"id": 3,
"title": "Inception",
"director": "Christopher Nolan"
},
{
"id": 4,
"title": "Django Unchained",
"director": "Quentin Tarantino"
}
]
}
Example Request
curl localhost:3030/films/3
Example Response
{
"film": {
"id": 3,
"title": "Inception",
"director": "Christopher Nolan"
}
}
For Windows users, replace the \
with ^
Example Request
curl -X POST localhost:3030/films \
-H 'Content-Type: application/json' \
-d '{"title":"Maleficent","director":"Robert Stromberg"}'
Example Response
{
"film": {
"id": 5,
"title": "Maleficent",
"director": "Robert Stromberg"
}
}
Example Request
curl -X DELETE localhost:3030/films/5
Example Response
{
"film": {
"id": 5,
"title": "Maleficent",
"director": "Robert Stromberg"
}
}
Example Request
curl -X PUT localhost:3030/films/5 \
-H 'Content-Type: application/json' \
-d '{"title":"Maleficent","director":"Robert Stromberg"}'
Example Response
{
"film": {
"id": 5,
"title": "Maleficent",
"director": "Robert Stromberg"
}
}
Example Request
curl localhost:3030/books
Example Response
{
"users": [
{
"id": 1,
"title": "1984",
"type": "fiction",
"author": "George Orwell"
},
{
"id": 2,
"title": "Life of Pi",
"type": "fiction",
"author": "Yann Martel"
},
{
"id": 3,
"title": "How to Win Friends and Influence People",
"type": "non-fiction",
"author": "Dale Carnegie"
},
{
"id": 4,
"title": "The Lean Startup",
"type": "non-fiction",
"author": "Eric Reis"
}
]
}
Example Request
curl localhost:3030/books/1
Example Response
{
"book": {
"id": 1,
"title": "1984",
"type": "fiction",
"author": "George Orwell"
}
}
For Windows users, replace the \
with ^
Example Request
curl -X POST localhost:3030/books \
-H 'Content-Type: application/json' \
-d '{"title":"The Name Of The Wind","type":"fantasy", "author":"Patrick Rothfuss"}'
Example Response
{
"book": {
"id": 4,
"title": "The Name Of The Wind",
"type": "fantasy",
"author": "Patrick Rothfuss"
}
}
Example Request
curl -X DELETE localhost:3030/books/4
Example Response
{
"book": {
"id": 4,
"title": "The Name Of The Wind",
"type": "fantasy",
"author": "Patrick Rothfuss"
}
}
Example Request
curl -X PUT localhost:3030/books/4 \
-H 'Content-Type: application/json' \
-d '{"title":"The Name Of The Wind","type":"fantasy", "author":"Patrick Rothfuss"}'
Example Response
{
"book": {
"id": 4,
"title": "The Name Of The Wind",
"type": "fantasy",
"author": "Patrick Rothfuss"
}
}