Wersja początkowa – łatwa
Zadanie polega na zbudowaniu, uruchomieniu i przetestowaniu prostego CRUD API. Załóżmy że chcemy przechowywać w bazie danych informacje o produktach (nazwa, opis, cena). Spośród dostępnych narzędzi proponuję wybrać:
- Node.js + Express.js + MongoDB + mongoose lub
- Node.js + Express.js + MySQL + mysql (jeśli wolisz bazę relacyjną).
Dane będziemy przekazywać i odbierać jako json.
Proste rozwiązanie dla MySQL (made by AI, tested by PK)
Zainstaluj wymagane zależności:
npm init -y
npm install express mysqlUtwórz bazę w MySQL (np w XAMPP przez PhpMyAdmin)
Stwórz plik app.js z następującą zawartością:
const express = require('express');
const mysql = require('mysql');
// Tworzenie aplikacji Express
const app = express();
// Middleware do parsowania JSON (Express ma wbudowany parser JSON od wersji 4.16)
app.use(express.json());
// Konfiguracja połączenia z bazą danych
const db = mysql.createConnection({
host: 'localhost',
user: 'root', // Zmień na swojego użytkownika
password: '', // Ustaw swoje hasło
database: 'products_db', // Ustaw nazwę swojej bazy danych
});
// Połączenie z bazą danych
db.connect((err) => {
if (err) {
console.error('Błąd połączenia z bazą danych:', err.message);
return;
}
console.log('Połączono z bazą danych MySQL.');
});
// Tworzenie tabeli w bazie danych (jeśli nie istnieje)
const createTableQuery = `
CREATE TABLE IF NOT EXISTS products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
price DECIMAL(10, 2) NOT NULL
);
`;
db.query(createTableQuery, (err) => {
if (err) throw err;
console.log('Tabela "products" została utworzona.');
});
// Endpointy API
// 1. Pobierz wszystkie produkty
app.get('/products', (req, res) => {
const query = 'SELECT * FROM products';
db.query(query, (err, results) => {
if (err) {
res.status(500).send(err.message);
return;
}
res.json(results);
});
});
// 2. Pobierz produkt po ID
app.get('/products/:id', (req, res) => {
const query = 'SELECT * FROM products WHERE id = ?';
db.query(query, [req.params.id], (err, results) => {
if (err) {
res.status(500).send(err.message);
return;
}
if (results.length === 0) {
res.status(404).send('Produkt nie został znaleziony.');
return;
}
res.json(results[0]);
});
});
// 3. Dodaj nowy produkt
app.post('/products', (req, res) => {
const { name, description, price } = req.body;
const query = 'INSERT INTO products (name, description, price) VALUES (?, ?, ?)';
db.query(query, [name, description, price], (err, result) => {
if (err) {
res.status(500).send(err.message);
return;
}
res.status(201).send({ id: result.insertId, name, description, price });
});
});
// 4. Aktualizuj produkt
app.put('/products/:id', (req, res) => {
const { name, description, price } = req.body;
const query = 'UPDATE products SET name = ?, description = ?, price = ? WHERE id = ?';
db.query(query, [name, description, price, req.params.id], (err, result) => {
if (err) {
res.status(500).send(err.message);
return;
}
if (result.affectedRows === 0) {
res.status(404).send('Produkt nie został znaleziony.');
return;
}
res.send('Produkt został zaktualizowany.');
});
});
// 5. Usuń produkt
app.delete('/products/:id', (req, res) => {
const query = 'DELETE FROM products WHERE id = ?';
db.query(query, [req.params.id], (err, result) => {
if (err) {
res.status(500).send(err.message);
return;
}
if (result.affectedRows === 0) {
res.status(404).send('Produkt nie został znaleziony.');
return;
}
res.send('Produkt został usunięty.');
});
});
// Uruchomienie serwera
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Serwer działa na porcie ${PORT}`);
});
Testowanie
- Możesz utworzyć testową aplikację JS która będzie pobierała dane z API (np: strona z przyciskami, z których każdy uruchamia odpowiednią funkcję API i powoduje wyświetlenie komunikatu z potwierdzeniem i danymi zwrotnymi)
- lub użyć gotowych narzędzi do testowania API. Proponuję Postman. W wersji bezpłatnej, bez zakładania konta, można wykonać wszystkie testy. Aby na przykład dodać dane do bazy za pomocą Postman:
- Wybierz metodę POST.
- Wprowadź URL:
http://localhost:3000/products. - Przejdź do zakładki Body, wybierz opcję raw i jako format wybierz JSON. Wklej:
{ "name": "Produkt A", "description": "Opis produktu A", "price": 99.99 } - Kliknij Send.
Zadanie poszerzone
Przetestuj działanie aplikacji i zrozum jej działanie. Poeksperymentuj! Wybierz, które elementy chcesz poprawić:
- Rozbij plik z kodem na mniejsze, by poprawić porządek i skalowalność.
- Dodaj kolejne endpointy i kolejną tabelę w bazie (np. z zakupami i sprzedażami).
- Poczytaj o bezpieczeństwie API i rozbuduj je np. o autoryzację i obsługę tokenów JWT.
Twój komentarz