Loading episodes…
0:00 0:00

Building a RESTful API CRUD Application with Laravel 11

00:00
BACK TO HOME

Building a RESTful API CRUD Application with Laravel 11

10xTeam January 29, 2024 5 min read

Building a RESTful API CRUD Application with Laravel 11

In this tutorial, we will demonstrate how to create a simple RESTful API CRUD (Create, Read, Update, Delete) application using Laravel 11. We’ll focus on maintaining a clean structure and utilizing Laravel features like Requests for validation and Resources for presenting clean and essential data.

Step 1: Installation and Database Connection

First, let’s install a fresh Laravel 11 application. Open your terminal and run the following command:

composer create-project laravel/laravel apicrud

Next, connect your Laravel application to the database. Open the .env configuration file and provide your database credentials:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_database_username
DB_PASSWORD=your_database_password

Step 2: Creating Models, Requests, Resources, Controllers, and Routes

Create a Post model with its migration:

php artisan make:model Post -m

Generate a Post Request for validation:

php artisan make:request StorePostRequest

Create a Post Resource for presenting clean data:

php artisan make:resource PostResource

Generate a Post API controller:

php artisan make:controller Api/PostController --model=Post

Migration File (create_posts_table.php)

<?php

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

class CreatePostsTable extends Migration
{
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('content');
            $table->timestamps();
        });
    }

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

Post Model (app/Models/Post.php)

<?php

namespace App\Models;

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

class Post extends Model
{
    use HasFactory;

    protected $fillable = ['title', 'content'];
}

Store Post Request (app/Http/Requests/StorePostRequest.php)

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StorePostRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'title' => ['required', 'max:70'],
            'content' => ['required']
        ];
    }
}

Post Resource (app/Http/Resources/PostResource.php)

<?php

namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class PostResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'title' => $this->title,
            'content' => $this->content,
            'created_at' => $this->created_at,
        ];
    }
}

Post Controller (app/Http/Controllers/Api/PostController.php)

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Post;
use Illuminate\Http\Request;
use App\Http\Requests\StorePostRequest;
use App\Http\Resources\PostResource;

class PostController extends Controller
{
    public function index()
    {
        $posts = Post::all();
        return PostResource::collection($posts);
    }

    public function store(StorePostRequest $request)
    {
        $post = Post::create($request->validated());
        return new PostResource($post);
    }

    public function update(StorePostRequest $request, Post $post)
    {
        $post->update($request->validated());
        return new PostResource($post);
    }

    public function destroy(Post $post)
    {
        $post->delete();
        return response(null, 204);
    }
}

API Routes (routes/api.php)

<?php

use App\Http\Controllers\Api\PostController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

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

Route::apiResource('posts', PostController::class)->except([
    'create', 'show', 'edit'
]);

Running the Laravel 11 Application

To run the Laravel 11 application, execute the following command:

php artisan serve

This tutorial provided a step-by-step instructions for creating a RESTful API CRUD application using Laravel 11.


Join the 10xdev Community

Subscribe and get 8+ free PDFs that contain detailed roadmaps with recommended learning periods for each programming language or field, along with links to free resources such as books, YouTube tutorials, and courses with certificates.

Audio Interrupted

We lost the audio stream. Retry with shorter sentences?