Сводка
Это краткое руководство по созданию 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); });
Что дальше
Еще одну статью о рефакторинге этого кода я написал здесь. Взгляни!