Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐘
Intermediaire 30 min Laravel

API REST avec Laravel

API REST avec Laravel : Tutoriel approfondi

Pourquoi API REST avec Laravel ?

En tant que développeur senior sur 10 ans d'expérience, vous savez que les applications modernes sont souvent complexes et interconnectées. Les API REST jouent un rôle crucial dans ce processus en permettant aux différentes parties de votre application de communiquer entre elles. En particulier, si vous travaillez sur des projets basés sur le web ou qui impliquent des microservices, la création d'API REST est une compétence essentielle.

Un cas concret de cette nécessité peut être l'intégration avec un service tiers ou la création d'une application mobile qui doit communiquer avec votre backend. Par exemple, imaginez que vous développiez une application e-commerce et que vous souhaitez permettre aux utilisateurs d'interagir avec vos produits via une API RESTful pour récupérer des informations sur les produits, les catégories, les promotions, etc.

Prerequis

Pour suivre ce tutoriel, vous aurez besoin de :

  • Un environnement PHP 7.4 ou plus récent
  • Composer (généralement installé avec PHP)
  • Node.js et npm pour les paquets JavaScript si nécessaire
  • Une base de données MySQL ou PostgreSQL
  • L'éditeur de code de votre choix (VSCode, Sublime Text, etc.)

Concepts fondamentaux

1. Ressources

Les ressources sont des entités qui ont une identité unique et peuvent être manipulées via les API REST. Par exemple, un utilisateur est une ressource.

## app/Models/User.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model {
    protected $fillable = ['name', 'email', 'password'];
}

2. Points d'entrée (Endpoints)

Les points d'entrée sont les URLs qui permettent aux clients de demander des ressources.

## routes/api.php
use Illuminate\Http\Request;
use App\Models\User;

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

3. Méthodes HTTP

Les méthodes HTTP définissent l'action à effectuer sur les ressources.

## routes/api.php
use Illuminate\Http\Request;
use App\Models\User;

Route::post('/users', function (Request $request) {
    return User::create($request->all());
});

Route::get('/users/{id}', function ($id) {
    return User::findOrFail($id);
});

Route::put('/users/{id}', function (Request $request, $id) {
    $user = User::findOrFail($id);
    $user->update($request->all());
    return $user;
});

Route::delete('/users/{id}', function ($id) {
    User::destroy($id);
    return response()->json(null, 204);
});

4. Middleware

Les middleware permettent de filtrer les requêtes HTTP avant qu'elles ne atteignent le contrôleur.

## app/Http/Middleware/Authenticate.php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class Authenticate {
    public function handle($request, Closure $next) {
        if (!Auth::check()) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }
        return $next($request);
    }
}

Mise en pratique : projet fil rouge

Étape 1 : Création du projet Laravel

composer create-project --prefer-dist laravel/laravel api-rest-tutorial
cd api-rest-tutorial
php artisan serve

Étape 2 : Configuration de la base de données

Modifiez le fichier .env pour configurer votre base de données MySQL.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=api_rest_tutorial
DB_USERNAME=root
DB_PASSWORD=

Étape 3 : Création des modèles et migrations

php artisan make:model Task -m
php artisan migrate

Modifiez le fichier database/migrations/xxxx_xx_xx_xxxxxx_create_tasks_table.php :

## database/migrations/xxxx_xx_xx_xxxxxx_create_tasks_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateTasksTable extends Migration {
    public function up() {
        Schema::create('tasks', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('description')->nullable();
            $table->boolean('completed')->default(false);
            $table->timestamps();
        });
    }

    public function down() {
        Schema::dropIfExists('tasks');
    }
}

Étape 4 : Création du contrôleur

php artisan make:controller TaskController --api

Modifiez le fichier app/Http/Controllers/TaskController.php :

## app/Http/Controllers/TaskController.php
namespace App\Http\Controllers;

use App\Models\Task;
use Illuminate\Http\Request;

class TaskController extends Controller {
    public function index() {
        return response()->json(Task::all());
    }

    public function store(Request $request) {
        $task = Task::create($request->all());
        return response()->json($task, 201);
    }

    public function show($id) {
        $task = Task::findOrFail($id);
        return response()->json($task);
    }

    public function update(Request $request, $id) {
        $task = Task::findOrFail($id);
        $task->update($request->all());
        return response()->json($task);
    }

    public function destroy($id) {
        $task = Task::findOrFail($id);
        $task->delete();
        return response()->json(null, 204);
    }
}

Étape 5 : Configuration des routes

Modifiez le fichier routes/api.php :

## routes/api.php
use App\Http\Controllers\TaskController;

Route::resource('tasks', TaskController::class);

Erreurs frequentes et debugging

1. Mauvaise configuration de la base de données

Code incorrect :

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=api_rest_tutorial
DB_USERNAME=root
DB_PASSWORD=

Code correct :

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=api_rest_tutorial
DB_USERNAME=root
DB_PASSWORD=password

2. Mauvaise route

Code incorrect :

Route::get('/tasks', function () {
    return Task::all();
});

Code correct :

Route::resource('tasks', TaskController::class);

Pour aller plus loin

  1. Authentification JWT avec Laravel Passport : Découvrez comment sécuriser votre API en utilisant des tokens JWT.
  2. Documentation Swagger avec L5-Swagger : Créez une documentation interactive pour votre API.
  3. Tests d'API avec Postman ou Insomnia : Automatisez les tests de vos endpoints.

Défi pratique : Ajoutez une fonctionnalité pour marquer une tâche comme terminée.

Besoin d'aide sur Laravel ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Qu'est-ce qu'une API REST dans Laravel?
Une API REST (Representational State Transfer) dans Laravel est une interface qui permet aux applications de s'interagir avec les données du serveur en utilisant des méthodes HTTP comme GET, POST, PUT et DELETE. Elle permet de créer des services web basés sur des ressources.
Comment installer un package Composer pour Laravel?
Pour installer un package Composer pour Laravel, ouvrez votre terminal et naviguez jusqu'au répertoire de votre projet Laravel. Ensuite, exécutez la commande `composer require vendor/package`. Par exemple, pour installer une bibliothèque de validation, vous pouvez utiliser `composer require intervention/image`.
Quelle est la différence entre un contrôleur et un service dans Laravel?
Un contrôleur dans Laravel est responsable de gérer les requêtes HTTP, d'appeler le service approprié et de renvoyer une réponse. Un service contient la logique métier ou des opérations complexes qui devraient être découplées du contrôleur pour maintenir un code propre et modulaire.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.