- Building a RESTful API.
- Performing CRUD operations.
- Writing API endpoints.
Your assignment page on Canvas should contain instructions for submitting this project. If you are still unsure, reach out to School Staff.
Use Node.js and Express to build an API that performs CRUD operations on users.
- Add a
server
script to thepackage.json
that runs the API usingnodemon
.
Add the code necessary in index.js
and api/server.js
to create a Web API and implement the following endpoints:
Method | URL | Description |
---|---|---|
POST | /api/users | Creates a user using the information sent inside the request body . |
GET | /api/users | Returns an array users. |
GET | /api/users/:id | Returns the user object with the specified id . |
DELETE | /api/users/:id | Removes the user with the specified id and returns the deleted user. |
PUT | /api/users/:id | Updates the user with the specified id using data from the request body . Returns the modified user |
Each User resource should conform to the following structure (AKA schema):
{
id: "a_unique_id", // String, required
name: "Jane Doe", // String, required
bio: "Having fun", // String, required
}
You can find them inside api/users/model.js
. All of these functions return Promises.
find
Resolves to the list of users (or empty array).findById
Takes anid
and resolves to the user with that id (or null if the id does not exist).insert
Takes a new user{ name, bio }
and resolves to the the newly created user{ id, name, bio }
.update
Takes anid
and an existing user{ name, bio }
and resolves the updated user{ id, name, bio}
(or null if the id does not exist).remove
Takes anid
and resolves to the deleted user{ id, name, bio }
.
When the client makes a POST
request to /api/users
:
-
If the request body is missing the
name
orbio
property:- respond with HTTP status code
400
(Bad Request). - return the following JSON response:
{ message: "Please provide name and bio for the user" }
.
- respond with HTTP status code
-
If the information about the user is valid:
- save the new user the the database.
- respond with HTTP status code
201
(Created). - return the newly created user document including its id.
-
If there's an error while saving the user:
- respond with HTTP status code
500
(Server Error). - return the following JSON object:
{ message: "There was an error while saving the user to the database" }
.
- respond with HTTP status code
When the client makes a GET
request to /api/users
:
- If there's an error in retrieving the users from the database:
- respond with HTTP status code
500
. - return the following JSON object:
{ message: "The users information could not be retrieved" }
.
- respond with HTTP status code
When the client makes a GET
request to /api/users/:id
:
-
If the user with the specified
id
is not found:- respond with HTTP status code
404
(Not Found). - return the following JSON object:
{ message: "The user with the specified ID does not exist" }
.
- respond with HTTP status code
-
If there's an error in retrieving the user from the database:
- respond with HTTP status code
500
. - return the following JSON object:
{ message: "The user information could not be retrieved" }
.
- respond with HTTP status code
When the client makes a DELETE
request to /api/users/:id
:
-
If the user with the specified
id
is not found:- respond with HTTP status code
404
(Not Found). - return the following JSON object:
{ message: "The user with the specified ID does not exist" }
.
- respond with HTTP status code
-
If there's an error in removing the user from the database:
- respond with HTTP status code
500
. - return the following JSON object:
{ message: "The user could not be removed" }
.
- respond with HTTP status code
When the client makes a PUT
request to /api/users/:id
:
-
If the user with the specified
id
is not found:- respond with HTTP status code
404
(Not Found). - return the following JSON object:
{ message: "The user with the specified ID does not exist" }
.
- respond with HTTP status code
-
If the request body is missing the
name
orbio
property:- respond with HTTP status code
400
(Bad Request). - return the following JSON response:
{ message: "Please provide name and bio for the user" }
.
- respond with HTTP status code
-
If there's an error when updating the user:
- respond with HTTP status code
500
. - return the following JSON object:
{ message: "The user information could not be modified" }
.
- respond with HTTP status code
-
If the user is found and the new information is valid:
- update the user document in the database using the new information sent in the
request body
. - respond with HTTP status code
200
(OK). - return the newly updated user document.
- update the user document in the database using the new information sent in the
- Test your work manually using Postman or HTTPie. Run automatic tests by executing
npm test
. - You are welcome to create additional files but do not move or rename existing files or folders.
- Do not alter your
package.json
file except to install additional libraries or add additional scripts. Do not update existing libs. - In your solution, it is essential that you follow best practices and produce clean and professional results.
Be careful not to break MVP while working on these Stretch goals! If in doubt create a new branch.
You'll need to enable the cors
middleware:
- add the
cors
npm module:npm i cors
. - add
server.use(cors())
afterserver.use(express.json())
.
Create a new React application and connect it to your server:
- the React application can be anywhere, but, for this project create it inside the folder for the solution.
- connect to the
/api/users
endpoint in the API and show the list of users. - add a delete button to each displayed user that will remove it from the server.
- add forms to add and update data.
- Style the list of users however you see fit.