Node.js - RESTful API

Привет,野心勃勃的程序设计师们! Сегодня мы отправляемся в увлекательное путешествие в мир Node.js и RESTful API. Не волнуйтесь, если эти термины сейчас听起来 как инопланетный язык - к концу этого руководства вы будете свободно говорить на "REST"! ?

Node.js - RESTFul API

Что такое архитектура REST?

REST, или Representational State Transfer, resembles a set of rules for how computers should communicate with each other over the internet. Imagine you're at a restaurant. You (the client) ask the waiter (the API) for a menu (data). The waiter doesn't cook the food themselves but goes to the kitchen (server) to get what you need. This back-and-forth is similar to how REST works!

Основные принципы REST:

  1. Клиент-сервер: Разделение интересов между интерфейсом пользователя и хранением данных.
  2. Без��态: Каждый запрос от клиента к серверу должен содержать всю информацию, необходимую для понимания запроса.
  3. Кэшируемые: Ответы должны определять себя как кэшируемые или нет.
  4. Единообразный интерфейс: Стандартизированный способ взаимодействия с сервером.
  5. Слоистая система: Клиент не может определить, подключен ли он напрямую к серверу или к посреднику.

Методы HTTP

Теперь давайте поговорим о методах HTTP. Это как глаголы, которые говорят серверу, какое действие выполнить. Вот основные из них:

Метод Описание Пример использования
GET Получение данных Получение профиля пользователя
POST Создание новых данных Добавление новой записи в блог
PUT Обновление существующих данных Редактирование данных пользователя
DELETE Удаление данных Удаление твитта
PATCH Частичное изменение данных Обновление только адреса электронной почты пользователя

Давайте посмотрим, как это работает на примерах кода на Node.js!

Пример запроса GET:

const http = require('http');

const server = http.createServer((req, res) => {
if (req.method === 'GET' && req.url === '/api/users') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ users: ['Alice', 'Bob', 'Charlie'] }));
}
});

server.listen(3000, () => {
console.log('Server running on port 3000');
});

В этом примере мы создаем простой сервер, который отвечает на запрос GET к '/api/users' списком пользователей в формате JSON. Когда вы запустите этот код и перейдете по адресу 'http://localhost:3000/api/users' в браузере, вы увидите список пользователей!

Пример запроса POST:

const http = require('http');

const server = http.createServer((req, res) => {
if (req.method === 'POST' && req.url === '/api/users') {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
const newUser = JSON.parse(body);
console.log('New user added:', newUser);
res.writeHead(201, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: 'User created successfully' }));
});
}
});

server.listen(3000, () => {
console.log('Server running on port 3000');
});

Этот пример показывает, как обрабатывать запрос POST для добавления нового пользователя. Он слушает входящие данные, обрабатывает их и отправляет ответ, confirming, что пользователь был создан.

RESTful Web Services

Теперь, когда мы понимаем основы, давайте углубимся в создание полного RESTful API с использованием Express, популярного фреймворка для Node.js, который делает разработку веб-приложений и API легким делом!

Сначала установим Express:

npm init -y
npm install express

Теперь создадим простой RESTful API для библиотеки книг:

const express = require('express');
const app = express();
app.use(express.json());

let books = [
{ id: 1, title: 'The Great Gatsby', author: 'F. Scott Fitzgerald' },
{ id: 2, title: 'To Kill a Mockingbird', author: 'Harper Lee' }
];

// GET все книги
app.get('/api/books', (req, res) => {
res.json(books);
});

// GET конкретную книгу
app.get('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Book not found');
res.json(book);
});

// POST новую книгу
app.post('/api/books', (req, res) => {
const book = {
id: books.length + 1,
title: req.body.title,
author: req.body.author
};
books.push(book);
res.status(201).json(book);
});

// PUT (обновление) книги
app.put('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Book not found');

book.title = req.body.title;
book.author = req.body.author;
res.json(book);
});

// DELETE книгу
app.delete('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Book not found');

const index = books.indexOf(book);
books.splice(index, 1);
res.json(book);
});

app.listen(3000, () => console.log('Server running on port 3000'));

Этот пример создает полный RESTful API для управления библиотекой книг. Давайте разберем его:

  1. Мы используем app.get() для обработки запросов GET, как для всех книг, так и для конкретных книг по ID.
  2. app.post() обрабатывает создание новых книг.
  3. app.put() позволяет нам обновлять существующие книги.
  4. app.delete() позволяет нам удалять книги из нашей библиотеки.

Каждый маршрут следует принципам RESTful, используя соответствующие методы HTTP и коды статусов.

Тестирование вашего API

Для тестирования вашего API вы можете использовать инструменты, такие как Postman или curl. Вот пример использования curl:

# GET все книги
curl http://localhost:3000/api/books

# POST новую книгу
curl -X POST -H "Content-Type: application/json" -d '{"title":"1984","author":"George Orwell"}' http://localhost:3000/api/books

# PUT (обновление) книги
curl -X PUT -H "Content-Type: application/json" -d '{"title":"Updated Title","author":"Updated Author"}' http://localhost:3000/api/books/1

# DELETE книгу
curl -X DELETE http://localhost:3000/api/books/1

И вот оно! Вы только что создали свой первый RESTful API с использованием Node.js и Express. Помните, что практика делает мастера. Попробуйте добавить больше функций к вашему API библиотеки книг, такие как поиск книг или сортировка их по разным критериям.

Создание API похоже на строительство моста между различными программными приложениями. С каждым API, которое вы создаете, вы открываете новые возможности для взаимодействия и обмена данными между программами. Продолжайте исследовать, продолжайте программировать и, самое главное, получайте удовольствие от своего пути к тому, чтобы стать экспертом в Node.js!

Credits: Image by storyset