GithubHelp home page GithubHelp logo

node-api1-project's Introduction

Node API 1 Project Starter Code

Introduction

  • Building a RESTful API.
  • Performing CRUD operations.
  • Writing API endpoints.

Instructions

Task 1: Project Setup and Submission

Your assignment page on Canvas should contain instructions for submitting this project. If you are still unsure, reach out to School Staff.

Task 2: Minimum Viable Product

Use Node.js and Express to build an API that performs CRUD operations on users.

  • Add a server script to the package.json that runs the API using nodemon.

Write endpoints

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

User Schema

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
}

Database Access Functions

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 an id 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 an id and an existing user { name, bio } and resolves the updated user { id, name, bio} (or null if the id does not exist).
  • remove Takes an id and resolves to the deleted user { id, name, bio }.

Endpoint Specifications

When the client makes a POST request to /api/users:

  • If the request body is missing the name or bio property:

    • respond with HTTP status code 400 (Bad Request).
    • return the following JSON response: { message: "Please provide name and bio for the user" }.
  • 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" }.

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" }.

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" }.
  • 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" }.

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" }.
  • 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" }.

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" }.
  • If the request body is missing the name or bio property:

    • respond with HTTP status code 400 (Bad Request).
    • return the following JSON response: { message: "Please provide name and bio for the user" }.
  • 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" }.
  • 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.

Important Notes

  • 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.

Task 3: Stretch Problems

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()) after server.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.

node-api1-project's People

Contributors

karthikv avatar ladrillo avatar luishrd avatar zoelud avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.