Сводка

Это краткое руководство по созданию RESTful API с помощью NodeJS и Express. Мы разработаем конечные точки для операций создания, чтения, обновления и удаления. В этом руководстве рассматривается массив объекта Books в памяти для операций CRUD.

Этот учебник является очень базовым руководством по созданию REST API.

Прежде чем начать, убедитесь, что Node установлен в вашей системе. Если нет, перейдите на ttps://nodejs.org/en/download/, чтобы загрузить и установить его.

Убедитесь, что Node установлен в вашей системе, используя приведенные ниже команды в терминале. Эта команда позволяет узнать версию Node, установленную в вашей системе.

node -v

Инициализировать приложение

Создайте новую папку для вашего проекта.

mkdir node-basic-api
cd node-basic-api

Для проекта NodeJS нам нужен файл package.json, который содержит имя проекта, версию, скрипт, все зависимости и т. д.

npm init -y

Приведенные выше команды создают package.json и package-lock.json в папке «node-basic-api». Файл package.json содержит данные, как показано ниже.

{
  "name": "node-basic-api", // name of application
  "version": "1.0.0", // veriosn of the application
  "description": "", // description of the application
  "main": "index.js", // application entrypoint file
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1" // some scripts
  },
  "keywords": [], // keywords to find packages.
  "author": "", // author of the application
  "license": "ISC" // license information 
}

Создайте папку «src», так как весь код должен находиться в ней.

mkdir src

Создайте файл «index.js» в папке «src» и добавьте приведенный ниже код.

// src/index.js
console.log("hello world")

Запустите приложение, используя приведенную ниже команду в терминале. Эта команда отобразит на консоли вывод «hello world».

node index.js

Настройка Express и API

Чтобы создать REST API, нам нужно установить пакет Express, используя следующую команду.

npm install express

Замените файл «index.js» приведенным ниже кодом. Этот код запускает экспресс-сервер на порту 3000 и имеет конечную точку на пути «/».

// src/index.js
// import the express
const express = require("express");

// define the Express application
const app = express();
app.use(express.json());

// define an endpoint with "/" path
app.get("/", (req, res) => {
  res.send("Welcome to node-basic-api");
});

// start the server
app.listen(3000, () => {
  console.log("listening on localhost:3000");
});

Чтобы запустить приложение, выполните команду еще раз

node src/index.js

Приведенная выше команда должна отображать вывод, как показано ниже.

listening on localhost:3000

Откройте любой браузер и введите URL как localhost:3000 . В веб-браузере вы должны увидеть ответ «Добро пожаловать в node-basic-api».

Создать API

В этом руководстве мы создадим операцию CRUD для книг с коллекцией книг в памяти.

GET Endpoint: получить все книги

Это API для получения всех книг. Мы прочитаем из массива books и отправим в ответ весь элемент из массива books.

// index.js
// import the express
const { json } = require("express");
const express = require("express");

// define the Express app
const app = express();
app.use(express.json());

// define an endpoint
app.get("/", (req, res) => {
  res.send("Welcome to node-basic-api");
});


// define in-memory books array
let books = [
  {
    id: 1,
    title: "Learning JavaScript Design Patterns",
    pages: 200,
  },
  {
    id: 2,
    title: "You Don't Know JS Yet",
    pages: 230,
  },
  {
    id: 3,
    title: "Pro Git",
    pages: 450,
  },
];

// Endpoint : Get all books 
app.get("/books", (req, res) => {
  res.send(books);
});



// starting the server
app.listen(3000, () => {
  console.log("listening on localhost:3000");
});

Тестирование конечной точки GET /books с почтальоном.

Конечная точка POST: добавить новую книгу

Эта конечная точка предназначена для добавления новой книги в существующую коллекцию книг.

app.post("/books", (req, res) => {
  const newBook = { id: books.length + 1, ...req.body };
  books.push(newBook);
  res.status(201).send(books);
});

Тестирование конечной точки POST /books с почтальоном

PUT Endpoint: обновить существующую книгу

Эта конечная точка предназначена для обновления значения существующей книги. Мы выполним следующие шаги.

  • Чтобы обновить существующую книгу, конечная точка примет идентификатор книги в параметре запроса.
  • Нам нужно найти существующую книгу по ее идентификатору в массиве книг, если она не будет найдена, мы ответим кодом состояния 404 и сообщением об ошибке.
  • Обновите значения существующей книги новыми значениями из тела.
app.put("/books/:id", (req, res) => {
  const book = books.find(item => item.id === parseInt(req.params.id));
  if (!book) return res.status(404).send(`The book with the id (${req.params.id}) was not found.`);  
  book.title = req.body.title; // update title
  book.pages = req.body.pages; // update pages
  res.send(book);
});

УДАЛИТЬ Конечную точку: удалить существующую книгу.

Эта конечная точка предназначена для удаления существующей книги. Мы выполним следующие шаги.

  • Чтобы удалить существующую книгу, конечная точка примет идентификатор книги в параметре запроса.
  • Нам нужно найти существующую книгу по ее идентификатору в массиве книг, если она не будет найдена, мы ответим кодом состояния 404 и сообщением об ошибке.
  • Удалить книгу из массива.
app.delete("/books/:id", (req, res) => {
  const book = books.find(item => item.id === parseInt(req.params.id));
  if (!book) return res.status(404).send(`The book with the id (${req.params.id}) was not found.`);
  const index = books.indexOf(book);
  books.splice(index, 1); // delete the book at index
  res.send(book);
});

Что дальше

Еще одну статью о рефакторинге этого кода я написал здесь. Взгляни!