Heim > Backend-Entwicklung > PHP-Tutorial > So erstellen Sie eine REST-API mit Laravel

So erstellen Sie eine REST-API mit Laravel

Patricia Arquette
Freigeben: 2024-10-30 23:26:30
Original
943 Leute haben es durchsucht

How to Create REST API Using Laravel

Hallo! In diesem Tutorial erstellen wir eine vollständige REST-API in Laravel, um Aufgaben zu verwalten. Ich führe Sie durch die grundlegenden Schritte, von der Einrichtung des Projekts bis zur Erstellung automatisierter Tests.

Schritt 1: Projekteinrichtung

Erstellen Sie ein neues Laravel-Projekt:

composer create-project laravel/laravel task-api
cd task-api
code .
Nach dem Login kopieren

Konfigurieren Sie die Datenbank:
Legen Sie in der .env-Datei Ihre Datenbankkonfigurationen fest:

DB_DATABASE=task_api
DB_USERNAME=your_username
DB_PASSWORD=your_password
Nach dem Login kopieren

Erstellen Sie die Aufgabentabelle:
Führen Sie den Befehl aus, um eine neue Migration für die Aufgabentabelle zu erstellen:

php artisan make:migration create_tasks_table --create=tasks
Nach dem Login kopieren

Definieren Sie in der Migrationsdatei (database/migrations/xxxx_xx_xx_create_tasks_table.php) die Tabellenstruktur:

<?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');
    }
};
Nach dem Login kopieren

Führen Sie die Migration aus, um die Tabelle zu erstellen:

php artisan migrate
Nach dem Login kopieren

Schritt 2: Modell und Controller erstellen

Erstellen Sie das Modell und den Controller für die Aufgabe:

php artisan make:model Task
php artisan make:controller TaskController --api
Nach dem Login kopieren

Definieren Sie das Aufgabenmodell (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'];
}
Nach dem Login kopieren

Schritt 3: API-Routen definieren

Fügen Sie in der Datei „routes/api.php“ die Routen für den TaskController hinzu:

<?php

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

Route::apiResource('tasks', TaskController::class);
Nach dem Login kopieren

Schritt 4: CRUD in TaskController implementieren

Im TaskController implementieren wir die grundlegenden CRUD-Methoden.

<?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);
    }
}
Nach dem Login kopieren

Schritt 5: Endpunkte testen (VS-Code)

Jetzt testen wir jeden Endpunkt manuell mit einer VS Code-Erweiterung namens REST Client (https://marketplace.visualstudio.com/items?itemName=humao.rest-client). Wenn Sie möchten, können Sie auch Insomnia oder Postman!

verwenden

Erstellen Sie nach der Installation der Erweiterung eine .http-Datei in Ihrem Projektordner mit folgendem Inhalt:

### 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
Nach dem Login kopieren

Mit dieser Datei können Sie Anfragen mithilfe der Erweiterung REST Client direkt aus VS Code senden, sodass Sie jede Route in Ihrer API ganz einfach testen können.

Schritt 6: Testen der API

Als nächstes erstellen wir Tests, um sicherzustellen, dass jede Route wie erwartet funktioniert.

Erstellen Sie zunächst eine Factory für das Aufgabenmodell:

php artisan make:factory TaskFactory
Nach dem Login kopieren
<?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,
        ];
    }
}
Nach dem Login kopieren

PHPUnit-Konfiguration:

<?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>
Nach dem Login kopieren

Erstellen Sie einen Integrationstest:

php artisan make:test TaskApiTest
Nach dem Login kopieren

Implementieren Sie in der Datei „tests/Feature/TaskApiTest.php“ die 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]);
    }
}
Nach dem Login kopieren

Führen Sie die Tests durch:

php artisan test
Nach dem Login kopieren

*Vielen Dank! *

Das obige ist der detaillierte Inhalt vonSo erstellen Sie eine REST-API mit Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage