GithubHelp home page GithubHelp logo

tjackreece / web-sprint-challenge-build-a-web-api Goto Github PK

View Code? Open in Web Editor NEW

This project forked from bloominstituteoftechnology/web-sprint-challenge-build-a-web-api

0.0 0.0 0.0 464 KB

JavaScript 100.00%

web-sprint-challenge-build-a-web-api's Introduction

Sprint Challenge Instructions

Read these instructions carefully. Understand exactly what is expected before starting this Sprint Challenge.

This challenge allows you to practice the concepts and techniques learned over the past sprint and apply them in a concrete project. This sprint explored how to build web services based on the REST (REpresentational State Transfer) architectural style. During this sprint, you studied Node.js and Express, server side routing, how to write Express middleware and how to deploy an API to Heroku.

In your challenge this week, you will demonstrate your mastery of these skills by designing and creating a web API to manage the following resources: Projects and Actions.

This is an individual assessment. All work must be your own. All projects will be submitted to Codegrade for automated review. You will also be given feedback by code reviewers the Monday after challenge submissions. For more information on the review process click here.

You are not allowed to collaborate during the sprint challenge.

Introduction

In meeting the minimum viable product (MVP) specifications listed below, your project should provide an API that has Create, Read, Update and Delete (CRUD) functionality for both projects and actions.

Instructions

Task 1: Project Set Up

  • Fork and clone this repository. If you are repeating this Course, delete your old fork from Github and re-fork and re-clone.
  • Create a new branch: git checkout -b <firstName-lastName>.
  • Implement the project on your newly created branch, committing changes regularly.
  • Push commits: git push origin <firstName-lastName>.
  • RUN npm install to install your dependencies.

Task 2: CodeGrade Setup

  • Follow instructions to set up Codegrade's Webhook and Deploy Key, making sure your deployment is set to your <firstName-lastName> branch.
  • Push your first commit: git commit --allow-empty -m "first commit" && git push.
  • Check to see that Codegrade has accepted your git submission.

Task 3: Project Requirements (MVP)

Your finished project must include all of the following requirements:

NPM Scripts

A "test" script already exists you can use to run tests against your code. A "resetdb" script exists that allows you to reset the database to its original state.

  • Write an npm script named "start" that uses node to run the API server.
  • Write an npm script named "server" that uses nodemon to run the API server.
  • Install nodemon as a development dependency that would not be used in production.

Build an API

Inside api/projects/projects-router.js build the following endpoints:

  • [GET] /api/projects
    • Returns an array of projects as the body of the response.
    • If there are no projects it responds with an empty array.
  • [GET] /api/projects/:id
    • Returns a project with the given id as the body of the response.
    • If there is no project with the given id it responds with a status code 404.
  • [POST] /api/projects
    • Returns the newly created project as the body of the response.
    • If the request body is missing any of the required fields it responds with a status code 400.
  • [PUT] /api/projects/:id
    • Returns the updated project as the body of the response.
    • If there is no project with the given id it responds with a status code 404.
    • If the request body is missing any of the required fields it responds with a status code 400.
  • [DELETE] /api/projects/:id
    • Returns no response body.
    • If there is no project with the given id it responds with a status code 404.
  • [GET] /api/projects/:id/actions
    • Returns an array of actions (could be empty) belonging to a project with the given id.
    • If there is no project with the given id it responds with a status code 404.

Inside api/actions/actions-router.js build endpoints for performing CRUD operations on actions:

  • [GET] /api/actions
    • Returns an array of actions (or an empty array) as the body of the response.
  • [GET] /api/actions/:id
    • Returns an action with the given id as the body of the response.
    • If there is no action with the given id it responds with a status code 404.
  • [POST] /api/actions
    • Returns the newly created action as the body of the response.
    • If the request body is missing any of the required fields it responds with a status code 400.
    • When adding an action make sure the project_id provided belongs to an existing project.
  • [PUT] /api/actions/:id
    • Returns the updated action as the body of the response.
    • If there is no action with the given id it responds with a status code 404.
    • If the request body is missing any of the required fields it responds with a status code 400.
  • [DELETE] /api/actions/:id
    • Returns no response body.
    • If there is no action with the given id it responds with a status code 404.

Database Schemas

The description of the structure and extra information about each resource stored in the included database (./data/lambda.db3) is listed below.

Projects

Field Data Type Metadata
id number do not provide it when creating projects, the database will generate it
name string required
description string required
completed boolean not required, defaults to false when creating projects

Actions

Field Data Type Metadata
id number do not provide it when creating actions, the database will generate it
project_id number required, must be the id of an existing project
description string required, up to 128 characters long
notes string required, no size limit. Used to record additional notes or requirements to complete the action
completed boolean not required, defaults to false when creating actions

Database Persistence Helpers

The project includes models you can use to manage the persistence of project and action data. These files are api/projects/projects-model.js and api/actions/actions-model.js. Both files publish the following api, which you can use to store, modify and retrieve each resource:

All these helper methods return a promise. Remember to use .then().catch() or async/await.

  • get(): resolves to an array of all the resources contained in the database. If you pass an id to this method it will return the resource with that id if one is found.
  • insert(): calling insert passing it a resource object will add it to the database and return the newly created resource.
  • update(): accepts two arguments, the first is the id of the resource to update, and the second is an object with the changes to apply. It returns the updated resource. If a resource with the provided id is not found, the method returns null.
  • remove(): the remove method accepts an id as its first parameter and, upon successfully deleting the resource from the database, returns the number of records deleted.

The projects-model.js includes an extra method called getProjectActions() that takes a project id as its only argument and returns a list of all the actions for the project.

We have provided test data for all the resources.

Notes:

  • Run tests locally executing npm test.
  • Use an HTTP client like HTTPie, Postman or Insomnia to manually test the API's endpoints.
  • Use Express Routers to organize your endpoints.
  • The use of middlewares to avoid repetitive code is highly recommended.
  • You are welcome to create additional files for middlewares, but do not move or rename existing files or folders.
  • Do not make changes to your package.json except to add additional dependencies and scripts.
  • In your solution, it is essential that you follow best practices and produce clean and professional results.
  • Schedule time to review, refine, and assess your work and perform basic professional polishing including spell-checking and grammar-checking on your work.
  • It is better to submit a challenge that meets MVP than one that attempts too much and does not.

Task 4: Stretch Goals

After finishing your required elements, you can push your work further. These goals may or may not be things you have learned in this module but they build on the material you just studied. Time allowing, stretch your limits and see if you can deliver on the following optional goals:

IMPORTANT: Do not break any MPV functionality by adding "stretch" code! Keep an eye on those tests!

  • Deploy the API to Heroku.
  • Configure the API to support environment variables.
  • Use middleware for validation of incoming data.

Submission format

  • Submit via Codegrade by pushing commits to your <firstName-lastName> branch on Github.
  • Create a pull-request to merge <firstName-lastName> branch into main.
  • Check Codegrade for automated feedback.
  • Check Codegrade on Monday following the Sprint Challenge for reviewer feedback.
  • New commits will be evaluated by Codegrade if pushed before the sprint challenge deadline.

Interview Questions

Be prepared to demonstrate your understanding of this week's concepts by answering questions on the following topics. You might prepare by writing down your own answers before hand.

  1. The core features of Node.js and Express and why they are useful.
  2. Understand and explain the use of Middleware.
  3. The basic principles of the REST architectural style.
  4. Understand and explain the use of Express Routers.
  5. Describe tooling used to manually test the correctness of an API.

web-sprint-challenge-build-a-web-api's People

Contributors

ladrillo avatar zoelud avatar luishrd 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.