Laravel is a powerful and elegant PHP framework that makes building web applications easier and more structured. One of the most common uses of Laravel is creating APIs (Application Programming Interfaces) that allow users or other systems to interact with your application. In this tutorial, we will walk through building a simple CRUD (Create, Read, Update, Delete) API with Laravel.
Prerequisites
Before we start, make sure you have the following installed:
- PHP (version 8.0 or higher)
- Composer
- Laravel (version 8 or 9)
- MySQL or any other database you prefer
If you don’t have Laravel installed yet, you can set it up by running:
composer create-project --prefer-dist laravel/laravel crud-api
Once installed, navigate to the newly created project folder:
cd crud-api
Step 1: Set Up the Database
First, you need to configure your database. In this guide, we’ll use MySQL. Open the .env
file and update the following lines with your database credentials:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=crud_api
DB_USERNAME=root
DB_PASSWORD=your_password
Now, create a MySQL database with the name crud_api
.
Step 2: Create a Model and Migration
Laravel's Eloquent ORM allows you to interact with your database efficiently. To create a model and migration for your API, run the following Artisan command:
php artisan make:model Post -m
This will generate a Post
model in the app/Models
directory and a migration file in the database/migrations
directory.
Open the migration file (database/migrations/xxxx_xx_xx_create_posts_table.php
) and define the columns for the posts
table. We’ll create a simple table with fields for title
and content
:
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
}
Run the migration to create the posts
table in your database:
php artisan migrate
Step 3: Create API Routes
Laravel provides a straightforward way to define routes for your API. Open the routes/api.php
file and define your CRUD routes for the Post
resource:
use App\Http\Controllers\PostController;
Route::apiResource('posts', PostController::class);
This will automatically register routes for the index
, show
, store
, update
, and destroy
methods.
Step 4: Create a Controller
Next, we need to create a controller to handle the logic for each of the CRUD operations. Run the following Artisan command:
php artisan make:controller PostController --api
This creates a new controller named PostController
in the app/Http/Controllers
directory. The --api
flag ensures that it is an API controller with only the necessary methods.
Open PostController.php
and implement each method:
1. index()
– Retrieve All Posts
This method returns a list of all posts.
public function index()
{
$posts = Post::all();
return response()->json($posts);
}
2. store()
– Create a New Post
This method stores a new post in the database.
public function store(Request $request)
{
$request->validate([
'title' => 'required|string|max:255',
'content' => 'required|string',
]);
$post = Post::create([
'title' => $request->title,
'content' => $request->content,
]);
return response()->json($post, 201);
}
3. show()
– Retrieve a Single Post
This method retrieves a specific post by its ID.
public function show($id)
{
$post = Post::findOrFail($id);
return response()->json($post);
}
4. update()
– Update a Post
This method updates an existing post.
public function update(Request $request, $id)
{
$post = Post::findOrFail($id);
$request->validate([
'title' => 'sometimes|string|max:255',
'content' => 'sometimes|string',
]);
$post->update($request->only('title', 'content'));
return response()->json($post);
}
5. destroy()
– Delete a Post
This method deletes a post by its ID.
public function destroy($id)
{
$post = Post::findOrFail($id);
$post->delete();
return response()->json(null, 204);
}
Step 5: Set Up Model and Validation
To ensure our Post
model works with mass assignment, open the Post.php
file in app/Models
and define the fillable
properties:
protected $fillable = ['title', 'content'];
This allows the Post
model to accept title
and content
during mass assignment in the store
and update
methods.
Step 6: Test Your API
To test the API, you can use a tool like Postman or cURL. Here are the routes you can test:
- GET /api/posts – Retrieve all posts
- GET /api/posts/{id} – Retrieve a specific post by ID
-
POST /api/posts – Create a new post (send a
title
andcontent
in the request body) -
PUT /api/posts/{id} – Update an existing post (send updated
title
and/orcontent
) - DELETE /api/posts/{id} – Delete a post by ID
For example, to create a post using cURL:
curl -X POST http://localhost:8000/api/posts \
-H "Content-Type: application/json" \
-d '{"title": "My First Post", "content": "This is the content of my first post."}'
You can start your server with the following command to test the API:
php artisan serve
Now, your API is up and running!
Conclusion
Congratulations! You have successfully created a simple CRUD API with Laravel. This API allows you to create, read, update, and delete posts. From here, you can extend the API to handle more complex functionality, add authentication, or integrate it with frontend frameworks like React or Vue.js.
Laravel's expressive syntax and powerful tools make it a great choice for building APIs. Keep exploring its features and best practices to take your skills to the next level. Happy coding!
Top comments (0)