REST vs RESTful API: У чому різниця?
🔹 REST (Representational State Transfer) – це архітектурний стиль, який визначає принципи та обмеження для створення веб-служб.
🔹 RESTful API – це веб-інтерфейс (API), який відповідає принципам REST і правильно їх застосовує.
Говорячи просто:
- REST – це концепція (теоретичний підхід).
- RESTful API – це практична реалізація REST у реальному додатку.
Далі розберемо це детально! 👇
🔹 1. Що таке REST?
REST – це набір правил та обмежень для створення API. Його ключові принципи:
- Клієнт-серверна архітектура – сервер відповідає за логіку, клієнт за відображення.
- Відсутність стану (Stateless) – кожен запит повинен містити всю необхідну інформацію.
- Кешування (Cacheable) – відповіді можуть бути кешовані для швидшого доступу.
- Єдиний інтерфейс (Uniform Interface) – стандартизовані URL і HTTP-методи.
- Шарова система (Layered System) – клієнт не знає, скільки проміжних серверів обробляють запит.
- Код за запитом (Optional Code-on-Demand) – сервер може надсилати виконуваний код (наприклад, JavaScript).
📌 Приклад простого REST-підходу:
Користувач хоче отримати список товарів:
GET /products
Сервер повертає:
[
{ "id": 1, "name": "Ноутбук", "price": 1500 },
{ "id": 2, "name": "Мишка", "price": 25 }
]
🔹 2. Що таке RESTful API?
RESTful API – це втілення REST у коді, яке дотримується всіх принципів REST.
🛑 Не кожен REST API є RESTful!
Якщо API має певні порушення принципів REST, воно не може називатися повністю RESTful.
Ознаки RESTful API:
✅ Використання HTTP-методів правильно:
GET
– отримати даніPOST
– створити ресурсPUT
– оновити ресурсDELETE
– видалити ресурс
✅ Чіткі URL без action
у назвах:
❌ Поганий варіант:
GET /getAllUsers
POST /createUser
DELETE /deleteUser?id=1
✅ Хороший RESTful API:
GET /users
POST /users
DELETE /users/1
✅ Використання статус-кодів HTTP:
200 OK
– успішний запит201 Created
– створено ресурс400 Bad Request
– неправильний запит404 Not Found
– ресурс не знайдено500 Internal Server Error
– помилка сервера
✅ Використання форматів даних:
RESTful API передає дані у JSON, XML або інших форматах.
✅ Робота без стану (Stateless):
Сервер не зберігає інформацію про клієнта між запитами. Кожен запит містить всі необхідні дані, наприклад, токен авторизації.
🔹 3. Основні Відмінності REST та RESTful API
Критерій | REST (Концепція) | RESTful API (Реалізація) |
---|---|---|
🔹 Що це? | Принципи побудови API | Конкретне API, яке відповідає цим принципам |
🔹 HTTP-методи | Теоретично повинні використовуватися правильно | Реально використовуються GET , POST , PUT , DELETE |
🔹 URL-адреси | Не обов’язково чисті | Використовують правильну структуру /resource/{id} |
🔹 Статус-коди | Можливо не використовуються | Завжди повертають правильний код (200, 201, 404, 500) |
🔹 Формат даних | Може бути будь-який | Найчастіше використовується JSON |
🔹 Кешування | Рекомендовано, але не обов’язково | Повинно бути реалізовано, якщо можливо |
🎯 4. Приклад RESTful API на Express.js
Щоб створити RESTful API, скористаємося Express.js:
📌 Встановлення та запуск
npm init -y
npm install express
📌 Створення серверу
const express = require('express');
const app = express();
app.use(express.json());
let products = [
{ id: 1, name: "Ноутбук", price: 1500 },
{ id: 2, name: "Мишка", price: 25 }
];
// 1️⃣ Отримати всі продукти
app.get('/products', (req, res) => {
res.json(products);
});
// 2️⃣ Отримати один продукт
app.get('/products/:id', (req, res) => {
const product = products.find(p => p.id == req.params.id);
if (!product) return res.status(404).json({ message: "Продукт не знайдено" });
res.json(product);
});
// 3️⃣ Додати новий продукт
app.post('/products', (req, res) => {
const newProduct = { id: products.length + 1, ...req.body };
products.push(newProduct);
res.status(201).json(newProduct);
});
// 4️⃣ Оновити продукт
app.put('/products/:id', (req, res) => {
let product = products.find(p => p.id == req.params.id);
if (!product) return res.status(404).json({ message: "Продукт не знайдено" });
product = { ...product, ...req.body };
res.json(product);
});
// 5️⃣ Видалити продукт
app.delete('/products/:id', (req, res) => {
products = products.filter(p => p.id != req.params.id);
res.json({ message: "Продукт видалено" });
});
// Запуск сервера
app.listen(3000, () => console.log('Сервер працює на порту 3000'));
🏆 5. Висновки
✔ REST – це архітектурний стиль, набір принципів, які варто застосовувати для створення API.
✔ RESTful API – це API, яке реалізує всі принципи REST і слідує найкращим практикам.
✔ Не всі API, які називають REST, є дійсно RESTful, оскільки вони можуть порушувати певні принципи.