In questa lezione svilupperemo le ultime due chiamate REST da inserire nella directory libro
del nostro progetto. Queste sono la funzione update
, per aggiornare un libro nel database della nostra biblioteca e la funzione delete
, per eliminarlo.
Update.php
Per prima cosa creiamo un nuovo file update.php
nella directory libro
e andiamo a inserire il seguente codice:
<?php
//headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
include_once '../config/database.php';
include_once '../models/libro.php';
$database = new Database();
$db = $database->getConnection();
$libro = new Libro($db);
$data = json_decode(file_get_contents("php://input"));
$libro->ISBN = $data->ISBN;
$libro->Titolo = $data->Titolo;
$libro->Autore = $data->Autore;
if($libro->update()){
http_response_code(200);
echo json_encode(array("risposta" => "Libro aggiornato"));
}else{
//503 service unavailable
http_response_code(503);
echo json_encode(array("risposta" => "Impossibile aggiornare il libro"));
}
?>
Il codice sopra riportato non dovrebbe risultare troppo nuovo, perchè ricalca la struttura di quelli sviluppati nella precedente lezione. Come prassi e come possiamo vedere all'inizio del codice, abbiamo la necessità di settare l'header della nostra richiesta HTTP con il metodo POST
. Il motivo è facilmente intuibile ed dovuto al fatto che tramite il body di questa richiesta dobbiamo "postare" i dati del libro che ci interessa aggiornare. Una volta assegnati i dati all'oggetto Libro
, possiamo eseguire il suo metodo update()
e, in base al suo valore di ritorno, rispondere con un codice HTTP 200 (per la buona riuscita) o 503 (esito negativo).
In entrambi i casi viene creato un array PHP con la risposta adeguata.
Per testare l'API REST apriamo Postman e inseriamo i seguenti dati di esempio:
Impostiamo il metodo HTTP POST (passo 1), inseriamo l'URL della richiesta (passo 2), selezioniamo il body per inserire i dati del libro (passo 3), selezioniamo raw (passo 4) e infine inseriamo i dati (in JSON) del libro che vogliamo aggiornare, come quelli qui di sotto (passo 5):
{
"ISBN" : "00000020dd02",
"Titolo" : "Kafka sulla spiaggia",
"Autore" : "Murakami Haruki",
}
Riceverete una delle risposte riportate nel codice in base all'esito della richiesta eseguita.
Delete.php
Apriamo un nuovo file e chiamiamolo delete.php
. In questo file ci occuperemo di cancellare un libro dal database della biblioteca. Inseriamo il codice sotto riportato:
<?php
//headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
include_once '../config/database.php';
include_once '../models/libro.php';
$database = new Database();
$db = $database->getConnection();
$libro = new Libro($db);
$data = json_decode(file_get_contents("php://input"));
$libro->ISBN = $data->ISBN;
if($libro->delete()){
http_response_code(200);
echo json_encode(array("risposta" => "Il libro e' stato eliminato"));
}else{
//503 service unavailable
http_response_code(503);
echo json_encode(array("risposta" => "Impossibile eliminare il libro."));
}
?>
Il ragionamento è simile ai precedenti, con l'eccezione che non abbiamo bisogno di avere come input un JSON con tutti i dati del libro che vogliamo cancellare ma solamente con il suo identificativo (chiave primaria), che nel nostro caso è il codice ISBN. Nel codice vediamo infatti che all'oggetto libro
viene inizializzato solo il suo attributo ISBN.
Come nelle precedenti chiamate REST, un array PHP viene popolato con la riposta da ritornare all'utente, insieme a un codice HTTP di risposta.
Proviamo con Postman:
Impostiamo il metodo HTTP POST (passo 1), inseriamo l'url della richiesta (passo 2), selezioniamo il body per inserire i dati del libro ed in questo caso solo il suo identificativo, ovvero l'ISBN (passo 3), selezioniamo raw (passo 4) e infine inseriamo l'ISBN del libro da cancellare.
{
"ISBN" : "00000020dd02"
}
Conclusioni
Come abbiamo visto creare delle API REST in maniera nativa con il linguaggio PHP non è un'attività troppo complessa. Le API che sono state presentate sono quelle che possiamo considerare elementari ma che ovviamente, in base alle varie esigenze possono essere ampliate. Per aggiungere nuove API al nostro progetto non dovremmo fare altro che creare un nuovo metodo nella classe Libro
per potersi collegare al database ed eseguire la query voluta, e inserire un nuovo file nella directory libro
per gestire la richiesta HTTP.