
Create Laravel 10 CRUD REST API
Laravel
16, Oct 2023
Let's assume you have Laravel installed and configured, follow these steps to create a basic CRUD REST API:
Create a New Laravel Project
composer create-project laravel/laravel laravel-crud-api
cd laravel-crud-api
Create a Model and Migration
php artisan make:model Expens -m
This command will generate a Expens Model and a corresponding migration file. Edit the migration to define the table structure.
Add Columns in Migration file database/migrations/....create_expens_table.php
public function up(): void
{
Schema::create('expens', function (Blueprint $table) {
$table->id();
$table->float('amount');
$table->text("description")->nullable();
$table->date('date')->nullable();
$table->timestamps();
});
}
Run migration
php artisan migrate
Define the Model app/Models/Expens.php
class Expens extends Model
{
use HasFactory;
protected $fillable = ["id", "amount", "description", "date"];
}
Create a Controller
php artisan make:controller Api/ExpensController -r
This will generate a controller for your API. this controller will handle CRUD operations for Expenses. Define Routes in routes/api.php
Route::get('/expens', [ExpensController::class, 'index'])->name('expens.list');
Route::get('/expens/{id}', [ExpensController::class, 'show'])->name('expens.show');
Route::post('/expens', [ExpensController::class, 'store'])->name('expens.store');
Route::put('/expens/{id}', [ExpensController::class, 'update'])->name('expens.update');
Route::delete('/expens/{id}', [ExpensController::class, 'destroy'])->name('expens.destroy');
ExpensController.php
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Expens;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Validator;
class ExpensController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$expenses = Expens::all();
$data = array(
"success" => true,
"data" => $expenses
);
return response()->json($data, 200);
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$data = array();
$validator = Validator::make($request->all(), [
'amount' => 'required',
'date' => 'required',
'description' => 'required',
]);
if ($validator->passes()) {
$expens = new Expens();
$expens->amount = $request->amount;
$expens->description = $request->description;
$expens->date = Carbon::parse($request->date);
$expens->save();
$data = array(
"message" => "Item Created Successfully!",
"success" => true,
"data" => $expens
);
} else {
return response()->json(array("success" => false, "type" => 'validation', 'errors' => $validator->messages()))
->setStatusCode(Response::HTTP_UNPROCESSABLE_ENTITY, Response::$statusTexts[Response::HTTP_UNPROCESSABLE_ENTITY]);
}
return response()->json($data, 201);
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
$expense = Expens::where('id', $id)->first();
$data = array(
"success" => true,
"data" => $expense
);
return response()->json($data, 200);
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
$data = array();
$expens = Expens::where('id', $id)->first();
$validator = Validator::make($request->all(), [
'amount' => 'required',
'date' => 'required',
'description' => 'required',
]);
if ($validator->passes()) {
$expens->amount = $request->amount;
$expens->description = $request->description;
$expens->date = Carbon::parse($request->date);
$expens->save();
$data = array(
"message" => "Item Updated Successfully!",
"success" => true,
"data" => $expens
);
} else {
return response()->json(array("success" => false, "type" => 'validation', 'errors' => $validator->messages()))
->setStatusCode(Response::HTTP_UNPROCESSABLE_ENTITY, Response::$statusTexts[Response::HTTP_UNPROCESSABLE_ENTITY]);
}
return response()->json($data, 200);
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
Expens::where('id', $id)->delete();
$data = array(
"message" => "Item Deleted Successfully!",
"success" => true
);
return response()->json($data, 200);
}
}
Test Your API You can use tools like Postman or cURL to test your API endpoints. Make sure your Laravel application is running (php artisan serve).