In questa lezione getteremo le basi per la creazione del nostro servizio REST in PHP che ci permetterà di accedere, modificare ed eliminare i dati caricati nel nostro database. Nella lezione precedente ci siamo occupati di creare il database di esempio, contenente i dati di una biblioteca. Il servizio REST che metteremo a punto in questa lezione ci permetterà di poter gestire i dati di questo database, semplicemente eseguendo una chiamata HTTP al nostro Web Service.
Ricordiamo che un Web Service RESTful è il gestore che si occupa di fornire le risorse richieste dai client tramite le operazioni di base del protocollo HTTP.
Ciò presuppone, come detto nella prima lezione di questa guida, una sorta di mapping tra i metodi HTTP (GET
, POST
, PUT
e DELETE
) e le operazioni CRUD (Create, Read, Update, Delete) che permettono di interagire con il database.
La struttura del progetto che andremo a creare somiglierà alla seguente:
|- BibliotecaREST - directory principale di progetto
|--- config/
|------ database.php - effettua la connessione al DB
|--- models/
|------ libro.php - contiene la rappresentazione di un libro della biblioteca
|--- libro/
|------ create.php - crea un libro sul database
|------ delete.php - cancella un libro sul database
|------ read.php - legge i libri dal database
|------ update.php - aggiorna un libro sul database
Collegarsi al database
All’interno della directory config, creiamo quindi il file database.php, che si occuperà di gestire la connessione con il nostro database. Questo file conterrà il seguente codice:
<?php
class Database
{
// credenziali
private $host = "localhost";
private $db_name = "Biblioteca";
private $username = "root";
private $password = "";
public $conn;
// connessione al database
public function getConnection()
{
$this->conn = null;
try
{
$this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
$this->conn->exec("set names utf8");
}
catch(PDOException $exception)
{
echo "Errore di connessione: " . $exception->getMessage();
}
return $this->conn;
}
}
?>
Essenzialmente, stiamo creando una classe Database
, dotata di un metodo pubblico getConnection()
che si occuperà di collegarsi al database. Ovviamente, le variabili $host
, $db_name
, $username
e $password
dovranno essere correttamente valorizzate rispettivamente con: nome dell'host, nome del DB, username e
password.
La classe Database
appena creata ci sarà d’aiuto più avanti quando andremo a creare, modificare, aggiornare o eliminare i dati presenti nel database.
Per approfondire la connessione di un database MySQL tramite PHP, è possibile fare riferimento all'apposita lezione della guida a MySQL.
Modello i dati: la classe Libro
A questo punto, passiamo alla definizione della classe Libro
, all’interno della directory models, che si occuperà di contenere il modello di un libro presente all’interno della nostra biblioteca.
Ricordiamo che la definizione della tabella libri (in SQL) era la seguente:
CREATE TABLE `libri` (
`ISBN` varchar(35) NOT NULL default ,
`Autore` varchar(50) NOT NULL default ,
`Titolo` varchar(255) NOT NULL default
);
La classe Libro dovrà quindi rispecchiare questa stessa struttura, includendo di fatto gli stessi attributi.
Si noti che la cartella models dovrebbe contenere tutte le classi che modellino i dati contenuti nelle varie tabelle del nostro database. Poiché in questo esempio abbiamo creato (per semplicità) una sola tabella, creeremo un solo modello (quindi una sola classe PHP), che si occuperà di memorizzare le informazioni di ogni libro presente nel database.
La presenza di più tabelle all’interno di un database implica (anche se non è sempre necessario) la presenza di uno stesso numero di modelli da dovere inserire all’interno di questa cartella. In realtà, bisogna creare un modello ogni qual volta si ha la necessità di prelevare, modificare o cancellare i dati presenti nelle tabelle di un database. Un modello è, in parole povere, un contenitore utilizzato per immagazzinare i dati provenienti dalla tabelle di un database. Approfondiremo successivamente tale concetto, introducendo la definizione di ORM (Object Relational Mapping).
Creaiamo quindi il file contenente il modello, ovvero libro.php:
<?php
class Libro
{
private $conn;
private $table_name = "libri";
// proprietà di un libro
public $ISBN;
public $Autore;
public $Titolo;
// costruttore
public function __construct($db)
{
$this->conn = $db;
}
// READ libri
function read()
{
// select all
$query = "SELECT
a.ISBN, a.Autore, a.Titolo
FROM
" . $this->table_name . " a ";
$stmt = $this->conn->prepare($query);
// execute query
$stmt->execute();
return $stmt;
}
// CREARE LIBRO
// AGGIORNARE LIBRO
// CANCELLARE LIBRO
}
?>
Come metodi della classe definiamo create()
, read()
, update()
e delete()
, che serviranno per interagire direttamente con il database Biblioteca.
Per il momento tralasciamo l'implementazione di create()
, update()
e delete()
, che saranno trattati nella prossima lezione.
Sviluppiamo il metodo read()
per leggere i libri presenti nella tabella libri, servendoci di una semplice query SQL. Ovviamente, affinchè questo possa avvenire, si deve utilizzare la connessione con il database che è stata passata al costruttore della classe Libro
e salvata nella variabile $conn
.
Creiamo adesso una directory chiamata libro in cui andremo ad inserire i file PHP create.php, read.php, update.php e delete.php, ognuno dei quali si occuperà di offrire un particolare servizio. In pratica, stiamo mappando le operazioni CRUD sui metodi
HTTP per poter gestire i libri della Biblioteca.
Dalla prossima lezione approfondiremo l'implementazione di tali file.