RESTful API расшифровывается как Representational State Transfer. REST определяет, как выглядит API. Это набор правил, которым следуют разработчики при создании своего API.

Одно из этих правил гласит, что вы должны иметь возможность получить часть данных (называемую ресурсом), когда вы ссылаетесь на определенный URL-адрес. Каждый URL-адрес называется запросом, а данные, отправленные вам обратно, называются ответом.

API означает интерфейс прикладного программирования. Это набор правил, позволяющих программам взаимодействовать друг с другом. Разработчик создает API на сервере и позволяет клиенту взаимодействовать с ним.

Обзор RESTful API и CRUD

В сетевой оболочке RESTful API использует протоколы передачи для выполнения операций CRUD. В качестве протокола передачи мы рассмотрим HTTP (или протокол передачи гипертекста).

Наиболее распространенными запросами HTTP являются GET, POST, PUT и DELETE. Все эти различные запросы HTTP, символизирующие разные типы операций CRUD, которые мы хотим выполнить.

Например, если мы используем запрос GET, мы действительно хотим получить или прочитать данные с сервера. Точно так же с запросом POST мы хотим создать данные и добавить их в нашу базу данных. PUT и DELETE будут соответственно выполнять действия по обновлению и удалению.

Важно отметить, что RESTful API — это не те, которые выполняют операции CRUD — они просто существуют, чтобы делать HTTP-запросы и указывать, какой тип операции CRUD необходимо выполнить!

И в зависимости от типа используемой базы данных, будь то MongoDB, PostgreSQL или MySQL и т. д. выполняются разные типы запросов. . В этой статье, как указано в заголовке, мы будем работать с базой данных PostgreSQL и рассмотрим все запросы CRUD.

Технический стек и предустановка

Чтобы иметь возможность создавать RESTful API и выполнять действия, которые мы рассмотрим в этой статье, вам потребуется выполнить предварительную установку. Вам потребуется установить PostgreSQL и Node.js.

Создание экспресс-сервера

Во-первых, нам нужно создать файл package.json в каталоге, в котором мы будем создавать наш проект. Что это сделает, так это просто перечислит все наши зависимости и в основном поможет нам отслеживать установленные пакеты. Это можно сделать, просто выполнив следующую команду:

npm init

Во-вторых, придется установить Express, что позволит нам построить сервер на Node.js. И, наконец, нам нужно будет установить pg, чтобы иметь возможность взаимодействовать с базой данных PostgreSQL и использовать ее команды запросов. Это можно сделать, выполнив следующую команду:

npm i express pg

В нашем рабочем каталоге нам нужно будет создать файл .js, в котором мы будем писать наш код, назовем его index.js.

touch index.js

В нашем файле index.js для запуска сервера потребуется следующий код:

const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

app.listen(port, () => {
  console.log(`Listening on port number ${port}`);
});

Создание таблицы базы данных в PostgreSQL

Сначала нам нужно будет подключиться к базе данных PostgreSQL через командную строку. Чтобы начать использовать psql, введите команду:

psql

Следующий экран подтверждает, что теперь вы можете редактировать и выполнять запросы в PostgreSQL.

Для создания новой базы потребуется выполнить следующую команду:

CREATE DATABASE user_database;

И чтобы создать таблицу в user_database, сначала нужно будет подключиться к этой базе данных, а затем запустить команду для создания таблицы, выполнив следующие действия:

\c user_database;
CREATE TABLE users (user_id SERIAL PRIMARY KEY, name VARCHAR(60), password VARCHAR(60));

Соединение сервера с базой данных

Для подключения к нашей базе данных мы создадим отдельный файл с именем db.js, где нам потребуется библиотека pg, которая поможет нам подключиться к только что созданной базе данных. .

Чтобы создать файл:

touch db.js

А в файле db.js у нас будет следующий код:

const Pool = require('pg').Pool;
const pool = new Pool({
  user: 'postgres',
  password: 'PASSWORD_IF_ANY',
  database: 'user_database',
  host: 'localhost',
});
pool.connect((err) => {
  if (!err) console.error('DB connection successful');
  else console.error('Error connecting to client');
});

module.exports = pool;

Создание маршрутов с помощью запросов к базе данных PostgreSQL

Во-первых, потребуется файл db.js в нашем файле index.js, и наш файл index.js будет выглядеть так:

const express = require('express');
const app = express();
const pool = require('./db');
app.use(express.json()); // => req.body enable to access data
const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`Listening on port number ${port}`);
});

Get — запрос и получение всех данных из базы данных

// GET all data from db
app.get('/users', async (req, res) => {
  try {
    const allUsers = await pool.query('SELECT * FROM users');
    res.json(allUsers.rows);  
  } catch (err) {
    console.error(err.message);
  }
});

GET — запрос и получение определенных данных из базы данных

// GET select specific data from db
app.get('/users/:id', async (req, res) => {
  try {
    const { id } = req.params;
    const user = await pool.query('SELECT * FROM users WHERE user_id = $1', [id]);
  if (user.rows.length == 0) res.json('Error. No such a user');
    else res.json(user.rows[0]);
  } catch (err) {
    console.error(err.message);
  }
});

POST — сохранение данных в БД

// POST add data to db
app.post('/users', async (req, res) => {
  try {
    const { name, password } = req.body;
    const newUser = await pool.query('INSERT INTO users (name, password) VALUES ($1, $2) RETURNING *', [name, password]);
  res.json(`User been added successfully. ID: ${newUser.rows[0].user_id} Name: ${name}`);
  } catch (err) {
    console.error(err.message);
  }
});

PUT — обновление данных в базе

// PUT update data in db
app.put('/users/:id', async (req, res) => {
  try {
    const { id } = req.params;
    const { name, password } = req.body;
    const updateUser = await pool.query('UPDATE users SET name = $1, password = $2 WHERE user_id = $3',[name, password, id]);
    res.json(`User been updated successfully. ID: ${id} Name: ${name}`);
  } catch (err) {
    console.log(err.message);
  }
});

DELETE — удаление данных в базе

// DELETE delete data in db
app.delete('/users/:id', async (req, res) => {
  try {
    const { id } = req.params;
    const user = await pool.query('SELECT * FROM users WHERE user_id = $1', [id]);
    const deleteUser = await pool.query('DELETE FROM users WHERE user_id = $1', [id]);
    res.json(`User ID: ${user.rows[0].user_id} Name: ${user.rows[0].name} been successfully deleted`);
  } catch (err) {
    console.error(err.message);
  }
});

Выводы

В этой статье мы рассмотрели основы создания сервера с помощью Express в Node.js и создания RESTful API с помощью . PostgreSQL. Мы выполнили все действия CRUD, выполнив запросы PostgresSQL.