Travail Pratique : Manipulation des API en Laravel avec Personnalisation des Attributs
et Création de Ressources API
Objectifs
Comprendre et manipuler les API RESTful avec Laravel.
Personnaliser les attributs des modèles.
Utiliser les ressources API pour structurer les réponses JSON.
Prérequis
Laravel installé sur votre machine.
Une base de données configurée.
Connaissances de base en Laravel et API REST.
Énoncé
Vous devez développer une API pour la gestion des chambres d’un hôtel. L’API doit
permettre les opérations CRUD (Create, Read, Update, Delete) sur les chambres, tout en
personnalisant les attributs du modèle et en structurant les réponses avec des ressources API.
Étapes à suivre
1. Création du Modèle et de la Migration
Créez un modèle Room avec les attributs suivants :
o id (clé primaire)
o name (nom de la chambre)
o type (type de chambre : simple, double, suite, etc.)
o price (prix de la chambre)
o status (disponible ou occupé)
Générez une migration et ajoutez ces champs.
Exécutez la migration pour créer la table correspondante.
2. Création du Contrôleur et des Routes
Générez un contrôleur RoomController en mode API.
Implémentez les méthodes suivantes :
use App\Models\Room;
use App\Http\Resources\RoomResource;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class RoomController extends Controller
{
public function index()
{
return RoomResource::collection(Room::paginate(10));
}
public function store(Request $request)
{
$validatedData = $request->validate([
'name' => 'required|string|max:255',
'type' => 'required|string',
'price' => 'required|numeric',
'status' => 'required|string|in:disponible,occupé,maintenance'
]);
$room = Room::create($validatedData);
return new RoomResource($room);
}
public function show($id)
{
$room = Room::findOrFail($id);
return new RoomResource($room);
}
public function update(Request $request, $id)
{
$room = Room::findOrFail($id);
$validatedData = $request->validate([
'name' => 'sometimes|required|string|max:255',
'type' => 'sometimes|required|string',
'price' => 'sometimes|required|numeric',
'status' => 'sometimes|required|string|
in:disponible,occupé,maintenance'
]);
$room->update($validatedData);
return new RoomResource($room);
}
public function destroy($id)
{
$room = Room::findOrFail($id);
$room->delete();
return response()->json(['message' => 'Chambre supprimée avec
succès'], 200);
}
}
Définissez les routes correspondantes dans routes/[Link] :
Route::apiResource('rooms', RoomController::class);
3. Personnalisation des Attributs du Modèle
Ajoutez des accessor et mutator dans le modèle Room, par exemple :
public function getFormattedPriceAttribute()
{
return number_format($this->price, 2, ',', ' ') . ' €';
}
public function setNameAttribute($value)
{
$this->attributes['name'] = strtoupper($value);
}
4. Création de la Ressource API
Générez une ressource API RoomResource.
Personnalisez la structure de la réponse pour inclure :
public function toArray($request)
{
return [
'id' => $this->id,
'nom' => $this->name,
'type' => $this->type,
'prix' => $this->formatted_price,
'statut' => ucfirst($this->status),
'créé_le' => $this->created_at->format('d-m-Y'),
];
}
Utilisez la ressource dans le contrôleur pour retourner les réponses JSON structurées.
5. Définition des Routes API
Dans routes/[Link], ajoutez :
Route::apiResource('rooms', RoomController::class);
6. Bonus
Ajoutez une recherche des chambres par type.
Implémentez une validation avancée pour store() et update().
Ajoutez l’authentification avec Sanctum pour sécuriser l’API.