Assignment 8

For this assignment, you are going to build a single API endpoint in Express that fetches and caches data from a GitHub API endpoint.

The endpoint you are going to build will be GET http://localhost:8000/api/github/:username, where :username can be filled in with a GitHub username (e.g. http://localhost:8000/api/github/iamdtang which is me). When you make a request to this endpoint, use the :username variable in the URL using request.params to make a request to https://api.github.com/users/iamdtang (where iamdtang will be whatever :username contains) using fetch(). Write out the entire response from the GitHub API to a file named cache-{username}.json (e.g. cache-iamdtang.json) based on the requested username.

Subsequent requests to this endpoint for the same username should read from the cached file instead of making a request to the GitHub API.

When a GitHub API response is successfully cached, use console.log() to log out GitHub API data was cached for {username} in {file}. Replace {username} and {file} with the actual values.

When reading from the cache, use console.log to log out GitHub API data for {username} was read from the cache. Replace {username} with the actual value.

Code Requirements

  1. Other than Express, do not reach for any other third-party libraries.
  2. You can complete this assignment using only fs.readFile(), fs.writeFile(), fetch(), console.log(), and JSON.stringify() - convert JSON into a string of JSON or JSON.parse() - convert a string of JSON into JSON (depending how it is written).
  3. Don't use async/await if you know what that is.
  4. Don't commit node_modules. Create a .gitignore file and add node_modules to it.

Submission

Create a video with audio using Zoom where you demo your assignment and explain where you fulfilled or did not fulfill each requirement. Put a link to this recording in the README.md file at the root of your project.

https://classroom.github.com/a/p0Oowsz7