01:08
Урок 36: Введение в RESTful API

Курс по программированию на JavaScript

Урок 36: Введение в RESTful API

REST (Representational State Transfer) — это архитектурный стиль, который определяет набор ограничений для создания веб-сервисов. RESTful API — это интерфейс, который следует принципам REST и позволяет взаимодействовать с сервером через HTTP-запросы. В этом уроке мы рассмотрим основы RESTful API и научимся создавать простой REST API с использованием Node.js и Express.

Основы RESTful API

RESTful API использует стандартные HTTP-методы для выполнения операций с ресурсами:

  • GET: Получение ресурса или списка ресурсов.
  • POST: Создание нового ресурса.
  • PUT: Обновление существующего ресурса.
  • DELETE: Удаление ресурса.

Каждый ресурс в RESTful API идентифицируется уникальным URL. Например, URL /users может представлять коллекцию пользователей, а /users/1 — конкретного пользователя с идентификатором 1.

Создание простого REST API

Для создания RESTful API мы будем использовать Node.js и Express — минималистичный веб-фреймворк для Node.js. Начнем с установки необходимых пакетов:

// Установка Express
npm install express
// Пакет Express установлен

Теперь создадим файл app.js и напишем код для нашего RESTful API:

// app.js
const express = require('express');
const app = express();
const port = 3000;

app.use(express.json());

let users = [
 { id: 1, name: 'John Doe' },
 { id: 2, name: 'Jane Doe' }
];

// Получение всех пользователей
app.get('/users', (req, res) => {
 res.json(users);
});

// Получение пользователя по ID
app.get('/users/:id', (req, res) => {
 const user = users.find(u => u.id === parseInt(req.params.id));
 if (!user) return res.status(404).send('User not found');
 res.json(user);
});

// Создание нового пользователя
app.post('/users', (req, res) => {
 const user = {
 id: users.length + 1,
 name: req.body.name
 };
 users.push(user);
 res.status(201).json(user);
});

// Обновление пользователя по ID
app.put('/users/:id', (req, res) => {
 const user = users.find(u => u.id === parseInt(req.params.id));
 if (!user) return res.status(404).send('User not found');
 user.name = req.body.name;
 res.json(user);
});

// Удаление пользователя по ID
app.delete('/users/:id', (req, res) => {
 const userIndex = users.findIndex(u => u.id === parseInt(req.params.id));
 if (userIndex === -1) return res.status(404).send('User not found');
 const deletedUser = users.splice(userIndex, 1);
 res.json(deletedUser);
});

app.listen(port, () => {
 console.log(`Server is running on http://localhost:${port}`);
});
// Сервер запущен на http://localhost:3000

Теперь запустите сервер, используя команду node app.js, и протестируйте API с помощью Postman или другого инструмента для отправки HTTP-запросов.

Упражнения

Упражнение 1: Добавление свойства email к пользователям

Добавьте свойство email к каждому пользователю и обновите все маршруты API для работы с этим свойством.

Решение:

// app.js (обновленный)
const express = require('express');
const app = express();
const port = 3000;

app.use(express.json());

let users = [
 { id: 1, name: 'John Doe', email: 'john@example.com' },
 { id: 2, name: 'Jane Doe', email: 'jane@example.com' }
];

// Получение всех пользователей
app.get('/users', (req, res) => {
 res.json(users);
});

// Получение пользователя по ID
app.get('/users/:id', (req, res) => {
 const user = users.find(u => u.id === parseInt(req.params.id));
 if (!user) return res.status(404).send('User not found');
 res.json(user);
});

// Создание нового пользователя
app.post('/users', (req, res) => {
 const user = {
 id: users.length + 1,
 name: req.body.name,
 email: req.body.email
 };
 users.push(user);
 res.status(201).json(user);
});

// Обновление пользователя по ID
app.put('/users/:id', (req, res) => {
 const user = users.find(u => u.id === parseInt(req.params.id));
 if (!user) return res.status(404).send('User not found');
 user.name = req.body.name;
 user.email = req.body.email;
 res.json(user);
});

// Удаление пользователя по ID
app.delete('/users/:id', (req, res) => {
 const userIndex = users.findIndex(u => u.id === parseInt(req.params.id));
 if (userIndex === -1) return res.status(404).send('User not found');
 const deletedUser = users.splice(userIndex, 1);
 res.json(deletedUser);
});

app.listen(port, () => {
 console.log(`Server is running on http://localhost:${port}`);
});
// Сервер запущен на http://localhost:3000

Объяснение: Мы добавили свойство email к каждому пользователю и обновили все маршруты API для работы с этим свойством.

Упражнение 2: Валидация данных

Добавьте валидацию данных для маршрутов POST и PUT, чтобы имя и email пользователя были обязательными и email был корректным.

Решение:

// app.js (с валидацией)
const express = require('express');
const app = express();
const port = 3000;

app.use(express.json());

let users = [
 { id: 1, name: 'John Doe', email: 'john@example.com' },
 { id: 2, name: 'Jane Doe', email: 'jane@example.com' }
];

// Функция валидации email
const isValidEmail = (email) => {
 const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
 return emailRegex.test(email);
};

// Получение всех пользователей
app.get('/users', (req, res) => {
 res.json(users);
});

// Получение пользователя по ID
app.get('/users/:id', (req, res) => {
 const user = users.find(u => u.id === parseInt(req.params.id));
 if (!user) return res.status(404).send('User not found');
 res.json(user);
});

// Создание нового пользователя
app.post('/users', (req, res) => {
 const { name, email } = req.body;
 if (!name || !email) {
 return res.status(400).send('Name and email are required');
 }
 if (!isValidEmail(email)) {
 return res.status(400).send('Invalid email format');
 }
 const user = {
 id: users.length + 1,
 name,
 email
 };
 users.push(user);
 res.status(201).json(user);
});

// Обновление пользователя по ID
app.put('/users/:id', (req, res) => {
 const { name, email } = req.body;
 if (!name || !email) {
 return res.status(400).send('Name and email are required');
 }
 if (!isValidEmail(email)) {
 return res.status(400).send('Invalid email format');
 }
 const user = users.find(u => u.id === parseInt(req.params.id));
 if (!user) return res.status(404).send('User not found');
 user.name = name;
 user.email = email;
 res.json(user);
});

// Удаление пользователя по ID
app.delete('/users/:id', (req, res) => {
 const userIndex = users.findIndex(u => u.id === parseInt(req.params.id));
 if (userIndex === -1) return res.status(404).send('User not found');
 const deletedUser = users.splice(userIndex, 1);
 res.json(deletedUser);
});

app.listen(port, () => {
 console.log(`Server is running on http://localhost:${port}`);
});
// Сервер запущен на http://localhost:3000

Объяснение: Мы добавили валидацию данных для маршрутов POST и PUT, чтобы имя и email пользователя были обязательными, и email был корректным.

Категория: JavaScript | Просмотров: 13 | Добавил: Admin | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: