2. Corso Laravel di B. Ferrari2
Rest API
REST significa Representational state transfer è
un’architettura software che definisce le modalità in cui
vengono creati servizi web.
I servizi RESTful permettono a l’interoperabilità tra computer
attraverso internet
Questi servizi permetto di accedere ed elaborare risorse web,
queste risorse sono identificate da una URL
3. Corso Laravel di B. Ferrari3
1 - Esempio REST API Students
La rest API students è una CRUD API con i seguenti
endpoints
1- GET /api/students restituisce tutti gli studenti. Questo
endpoint accetta solo richieste GET
2- POST /api/students crea un nuovo studente. Questo
endpoint accetta solo richieste POST
3- PUT /api/students/{id} aggiorna uno i dati di uno studente.
Questo endpoint accetta solo richieste PUT
4- DELETE /api/students/{id} elimina uno studente. Questo
endpoint accetta solo richieste DELETE
4. Corso Laravel di B. Ferrari4
2- Esempio REST API Students
Requisiti Composer, Laravel 7, Postman e XAMPP
I passaggi per la creazione della Rest API students sono i seguenti:
1- Avvio Servizi avvio Apache e MySQL da XAMPP Control Panel
2- Creazione Database creo database students usando phpmyadmin (accessibile all’indirizzo
http://localhost/phpmyadmin)
3- Creazione progetto Laravel nella carella di root (c:/xampp/htdocs) creo il progetto students con il
comando laravel new students
4- Creazione Model
4.1 Mi sposto nella cartella students comando cd students
4.2 Eseguo il comando php artisan make:model Student -m, che crea il model Strudent e migrazione
5. Corso Laravel di B. Ferrari5
3- Esempio REST API Students
5 – Configurazione Model in app/Student.php andiamo a configurare il model
come segue.
namespace App;
use IlluminateDatabaseEloquentModel;
class Student extends Model
{
protected $table = 'students';
protected $fillable = ['name', 'course'];
}
6. Corso Laravel di B. Ferrari6
4- Esempio REST API Students
6 – Configurazione Migrazone nella cartella database/migrations troviamo la migrazione
creata nel punto 4 . Apriamo la classe di migrazione e andiamo a implementare il metodo up
come segue:
...
public function up()
{
Schema::create('students', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('course');
$table->timestamps();
});
}
…
7. Corso Laravel di B. Ferrari7
5- Esempio REST API Students
7 – Configurazione DB apriamo il file .env e andiamo a
configurare il file come segue
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=<your-database-name> (students)
DB_USERNAME=<your-database-username> (root)
DB_PASSWORD=<your-database-password>
8- Migrazione eseguiamo la prima migrazione con il comando
php artisan migrate questo andrà a creare la tabella come definito
8. Corso Laravel di B. Ferrari8
6- Esempio REST API Students
9 – Creazione Controller eseguiamo il comando php artisan make:controller StudentController che crea un controller vuoto in
app/Http/Controllers/StudentController.php. Inseriamo i metodi CRUD come segue:
class StudentController extends Controller
{
public function getAll() {
// logic to get all students goes here
}
public function create(Request $request) {
// logic to create a student record goes here
}
public function get($id) {
// logic to get a student record goes here
}
public function update(Request $request, $id) {
// logic to update a student record goes here
}
public function delete ($id) {
// logic to delete a student record goes here
}
}
9. Corso Laravel di B. Ferrari9
7- Esempio REST API Students
10 Creazione Routes apriamo il file routes/api.php e inseriamo i
punti di accesso della nostra api, aggiungendo il codice seguente:
...
Route::get('student', 'StudentController@getAll');
Route::get('student/{id}', 'StudentController@get');
Route::post('student', 'StudentController@create');
Route::put('student/{id}', 'StudentController@update');
Route::delete('student/{id}','StudentController@delete');
…
Nota: api.php tutte le route hanno prefisso /api per default
10. Corso Laravel di B. Ferrari10
8- Esempio REST API Students
11 Implementazione action:
Implementiamo come segue la action create, il codice riceve in una POST i parametri name e post in formato x-www-form-url-encoded e crea un’instanza del classe
student e tramite il suo metodo save viene memorizzato a database
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppStudent;
class StudentController extends Controller
{
...
public function create(Request $request) {
$student = new Student;
$student->name = $request->name;
$student->course = $request->course;
$student->save();
return response()->json([
"message" => "student record created"
], 201);
}
...
}
11. Corso Laravel di B. Ferrari11
9- Esempio REST API Students
Possiamo verificare simulando una chiamata tramite Postman.
Premiamo il pulsante NEW per creare una nuova chiamata di
tipo POST e impostiamo com url
http://localhost/students/public/api/student e andiamo a
impostare i campi name e course da inserire in formato x-
www-form-url-encoded
13. Corso Laravel di B. Ferrari13
11- Esempio REST API Students
Procediamo, in maniera analoga, con l’implementazione e test dei restanti metodi del controller
public function getAll() {
$students = Student::get()->toJson();
return response($students, 200);
}
public function get($id) {
if (Student::where('id', $id)->exists()) {
$student = Student::where('id', $id)->get()->toJson();
return response($student, 200);
} else {
return response()->json([
"message" => "Student not found"
], 404);
}
}
14. Corso Laravel di B. Ferrari14
12- Esempio REST API Students
public function update(Request $request, $id) {
if (Student::where('id', $id)->exists()) {
$student = Student::find($id);
$student->name = is_null($request->name) ? $student->name : $request->name;
$student->course = is_null($request->course) ? $student->course : $request->course;
$student->save();
return response()->json([
"message" => "records updated successfully"
], 200);
} else {
return response()->json([
"message" => "Student not found"
], 404);
}
}
15. Corso Laravel di B. Ferrari15
13- Esempio REST API Students
public function delete ($id) {
if(Student::where('id', $id)->exists()) {
$student = Student::find($id);
$student->delete();
return response()->json([
"message" => "records deleted"
], 202);
} else {
return response()->json([
"message" => "Student not found"
], 404);
}
}