Maison > développement back-end > tutoriel php > Comment créer une API REST à l'aide de Laravel

Comment créer une API REST à l'aide de Laravel

Patricia Arquette
Libérer: 2024-10-30 23:26:30
original
968 Les gens l'ont consulté

How to Create REST API Using Laravel

Bonjour ! Dans ce didacticiel, nous allons créer une API REST complète dans Laravel pour gérer les tâches. Je vous guiderai à travers les étapes de base, de la configuration du projet à la création de tests automatisés.

Étape 1 : Configuration du projet

Créez un nouveau projet Laravel :

composer create-project laravel/laravel task-api
cd task-api
code .
Copier après la connexion

Configurer la base de données :
Dans le fichier .env, définissez les configurations de votre base de données :

DB_DATABASE=task_api
DB_USERNAME=your_username
DB_PASSWORD=your_password
Copier après la connexion

Générer le tableau des tâches :
Exécutez la commande pour créer une nouvelle migration pour la table des tâches :

php artisan make:migration create_tasks_table --create=tasks
Copier après la connexion

Dans le fichier de migration (database/migrations/xxxx_xx_xx_create_tasks_table.php), définissez la structure de la table :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        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(): void
    {
        Schema::dropIfExists('tasks');
    }
};
Copier après la connexion

Exécutez la migration pour créer la table :

php artisan migrate
Copier après la connexion

Étape 2 : Création du modèle et du contrôleur

Créez le modèle et le contrôleur pour la tâche :

php artisan make:model Task
php artisan make:controller TaskController --api
Copier après la connexion

Définir le modèle de tâche (app/Models/Task.php) :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    use HasFactory;

    protected $fillable = ['title', 'description', 'completed'];
}
Copier après la connexion

Étape 3 : Définition des routes API

Dans le fichier routes/api.php, ajoutez les routes pour le TaskController :

<?php

use App\Http\Controllers\TaskController;
use Illuminate\Support\Facades\Route;

Route::apiResource('tasks', TaskController::class);
Copier après la connexion

Étape 4 : Implémentation de CRUD dans TaskController

Dans TaskController, nous implémenterons les méthodes CRUD de base.

<?php

namespace App\Http\Controllers;

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

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

    public function store(Request $request)
    {
        $request->validate([
            'title' => 'required|string|max:255',
            'description' => 'nullable|string'
        ]);
        $task = Task::create($request->all());
        return response()->json($task, 201);
    }

    public function show(Task $task)
    {
        return response()->json($task, 200);
    }

    public function update(Request $request, Task $task)
    {
        $request->validate([
            'title' => 'required|string|max:255',
            'description' => 'nullable|string',
            'completed' => 'boolean'
        ]);
        $task->update($request->all());
        return response()->json($task, 201);
    }

    public function destroy(Task $task)
    {
        $task->delete();
        return response()->json(null, 204);
    }
}
Copier après la connexion

Étape 5 : Test des points de terminaison (code VS)

Nous allons maintenant tester chaque point de terminaison manuellement, à l'aide d'une extension VS Code appelée REST Client (https://marketplace.visualstudio.com/items?itemName=humao.rest-client). Si vous préférez, vous pouvez également utiliser Insomnia ou Facteur !

Après avoir installé l'extension, créez un fichier .http dans votre dossier de projet avec le contenu suivant :

### Create New Task
POST http://127.0.0.1:8000/api/tasks HTTP/1.1
content-type: application/json
Accept: application/json

{
    "title": "Study Laravel"
}

### Show Tasks
GET http://127.0.0.1:8000/api/tasks HTTP/1.1
content-type: application/json
Accept: application/json

### Show Task
GET http://127.0.0.1:8000/api/tasks/1 HTTP/1.1
content-type: application/json
Accept: application/json

### Update Task
PUT http://127.0.0.1:8000/api/tasks/1 HTTP/1.1
content-type: application/json
Accept: application/json

{
    "title": "Study Laravel and Docker",
    "description": "We are studying!",
    "completed": false
}

### Delete Task
DELETE http://127.0.0.1:8000/api/tasks/1 HTTP/1.1
content-type: application/json
Accept: application/json
Copier après la connexion

Ce fichier vous permet d'envoyer des requêtes directement depuis VS Code à l'aide de l'extension REST Client, ce qui facilite le test de chaque route dans votre API.

Étape 6 : tester l'API

Ensuite, créons des tests pour nous assurer que chaque itinéraire fonctionne comme prévu.

Tout d'abord, créez une usine pour le modèle de tâches :

php artisan make:factory TaskFactory
Copier après la connexion
<?php

namespace Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;

class TaskFactory extends Factory
{
    public function definition(): array
    {
        return [
            'title' => fake()->sentence(),
            'description' => fake()->paragraph(),
            'completed' => false,
        ];
    }
}
Copier après la connexion

Configuration PHPUnit :

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
    bootstrap="vendor/autoload.php"
    colors="true"
>
    <testsuites>
        <testsuite name="Unit">
            <directory>tests/Unit</directory>
        </testsuite>
        <testsuite name="Feature">
            <directory>tests/Feature</directory>
        </testsuite>
    </testsuites>
    <source>
        <include>
            <directory>app</directory>
        </include>
    </source>
    <php>
        <env name="APP_ENV" value="testing" />
        <env name="BCRYPT_ROUNDS" value="4" />
        <env name="CACHE_DRIVER" value="array" />
        <env name="DB_CONNECTION" value="sqlite" />
        <env name="DB_DATABASE" value=":memory:" />
        <env name="MAIL_MAILER" value="array" />
        <env name="PULSE_ENABLED" value="false" />
        <env name="QUEUE_CONNECTION" value="sync" />
        <env name="SESSION_DRIVER" value="array" />
        <env name="TELESCOPE_ENABLED" value="false" />
    </php>
</phpunit>
Copier après la connexion

Créer un test d'intégration :

php artisan make:test TaskApiTest
Copier après la connexion

Dans le fichier tests/Feature/TaskApiTest.php, implémentez les tests :

<?php

namespace Tests\Feature;

use App\Models\Task;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class TaskApiTest extends TestCase
{
    use RefreshDatabase;

    public function test_can_create_task(): void
    {
        $response = $this->postJson('/api/tasks', [
            'title' => 'New Task',
            'description' => 'Task Description',
            'completed' => false,
        ]);

        $response->assertStatus(201);

        $response->assertJson([
            'title' => 'New Task',
            'description' => 'Task Description',
            'completed' => false,
        ]);
    }

    public function test_can_list_tasks()
    {
        Task::factory()->count(3)->create();

        $response = $this->getJson('/api/tasks');

        $response->assertStatus(200);

        $response->assertJsonCount(3);
    }

    public function test_can_show_task()
    {
        $task = Task::factory()->create();

        $response = $this->getJson("/api/tasks/{$task->id}");

        $response->assertStatus(200);

        $response->assertJson([
            'title' => $task->title,
            'description' => $task->description,
            'completed' => false,
        ]);
    }

    public function test_can_update_task()
    {
        $task = Task::factory()->create();

        $response = $this->putJson("/api/tasks/{$task->id}", [
            'title' => 'Update Task',
            'description' => 'Update Description',
            'completed' => true,
        ]);

        $response->assertStatus(201);

        $response->assertJson([
            'title' => 'Update Task',
            'description' => 'Update Description',
            'completed' => true,
        ]);
    }

    public function test_can_delete_task()
    {
        $task = Task::factory()->create();

        $response = $this->deleteJson("/api/tasks/{$task->id}");

        $response->assertStatus(204);

        $this->assertDatabaseMissing('tasks', ['id' => $task->id]);
    }
}
Copier après la connexion

Lancer les tests :

php artisan test
Copier après la connexion

*Merci ! *

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal