--- tags: - node-js - REST - APIs --- # Creating a RESTful API: Introduction We are going to use Express to create a [RESTful API](RESTful_APIs.md) in Node.js. ## Request types Express provides us with methods corresponding to each of the [HTTP request types](HTTP_request_types.md): - `.get()` - `.post()` - `.put()` - `.delete()` ## Our data set > Typically when you create a RESTful API you are going to be returning data > from a database. For simplicity we are just going simulate this with a simple > data array so that we can focus on the Express syntax rather than database > handling. Later we will integrate this with a > [MongoDB database](05_%20Integrating_the_database.md). We will mainly work with the following array of objects: ```js const courses = [ { id: 1, name: "First course", }, { id: 2, name: "Second course", }, { id: 3, name: "Third course", }, ]; ``` ## Creating an Express instance We first create an instance of Express within `index.js`. This will be the main coordinating file and we will aim to minimise the amount of business logic we have in this file. It should really just be for initialization and managing [middleware](Middleware_in_NodeJS.md). ```js const express = require("express"); const app = express(); ``` ## Routing We are going to receive all our HTTP requests at the path `/api/courses` and we will place all code related to this route in a dedicated Node module (`routes/courses.js`) rather than within `index.js` which should remain as uncluttered as possible. First we need to declare this in `index.js`: ```js const courses = require("./routes/courses"); app.use("/api/courses", courses); ``` Then within `courses.js` we instantiate an express router that `app.js` will route to: ```js const router = express.Router(); ``` Our REST requests will all follow the following pattern: ```js router.get("/", (req, res) => { res.send(courses); }); ``` We target the `Router` instance we created and all paths will be expressed as `/` since the app will route by default to `/courses/api` from `index.js` ## Create listener With the routing established and the Express instance created we can now listen for requests: ```js app.listen(3000, () => console.log("Listening on port 30000...")); ``` ## REST endpoints We can now proceed to set up our RESTful endpoints: [GET requests](1_GET.md) [POST requests](2_POST.md) [PUT requests](3_PUT.md) [DELETE requests](4_DELETE.md)