Building a RESTful API CRUD Application with Laravel 11
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.
-
Date: