Cara Membuat REST API CRUD Lengkap di Laravel

REST API adalah fondasi utama dalam pengembangan aplikasi modern, baik untuk mobile app maupun frontend terpisah (SPA). Laravel menyediakan tools yang sangat lengkap untuk membangu...

Cara Membuat REST API CRUD Lengkap di Laravel

REST API adalah fondasi utama dalam pengembangan aplikasi modern, baik untuk mobile app maupun frontend terpisah (SPA). Laravel menyediakan tools yang sangat lengkap untuk membangun REST API yang bersih dan terstruktur. Dalam tutorial ini, kamu akan belajar membuat REST API CRUD (Create, Read, Update, Delete) lengkap menggunakan Laravel 10/11.

Persiapan Project Laravel

Pastikan kamu sudah memiliki project Laravel. Jika belum, buat dengan perintah berikut:

composer create-project laravel/laravel laravel-api
cd laravel-api
php artisan serve

Buat model, migration, dan resource controller sekaligus dengan satu perintah:

php artisan make:model Product -mcr

Flag -m membuat migration, -c membuat controller, dan -r menjadikannya resource controller.

Membuat Migration dan Model

Buka file migration yang baru dibuat di database/migrations/ dan tambahkan kolom yang dibutuhkan:

public function up(): void
{
    Schema::create('products', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->text('description')->nullable();
        $table->decimal('price', 10, 2);
        $table->integer('stock')->default(0);
        $table->timestamps();
    });
}

Kemudian edit model app/Models/Product.php:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $fillable = [
        'name',
        'description',
        'price',
        'stock',
    ];
}

Jalankan migration:

php artisan migrate

Mendefinisikan Route API

Buka file routes/api.php dan tambahkan route resource:

<?php

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

Route::apiResource('products', ProductController::class);

Perintah apiResource secara otomatis membuat 5 route: index, store, show, update, dan destroy. Kamu bisa cek dengan:

php artisan route:list --path=api

Membuat API Resource untuk Response

Gunakan Laravel API Resource agar format response JSON konsisten:

php artisan make:resource ProductResource

Edit app/Http/Resources/ProductResource.php:

<?php

namespace App\Http\Resources;

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

class ProductResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        return [
            'id'          => $this->id,
            'name'        => $this->name,
            'description' => $this->description,
            'price'       => (float) $this->price,
            'stock'       => $this->stock,
            'created_at'  => $this->created_at->toDateTimeString(),
        ];
    }
}

Menulis Logic di Controller

Buka app/Http/Controllers/ProductController.php dan isi setiap method:

<?php

namespace App\Http\Controllers;

use App\Http\Resources\ProductResource;
use App\Models\Product;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;

class ProductController extends Controller
{
    public function index(): JsonResponse
    {
        $products = Product::latest()->paginate(10);
        return ProductResource::collection($products)->response();
    }

    public function store(Request $request): JsonResponse
    {
        $validated = $request->validate([
            'name'        => 'required|string|max:255',
            'description' => 'nullable|string',
            'price'       => 'required|numeric|min:0',
            'stock'       => 'required|integer|min:0',
        ]);

        $product = Product::create($validated);

        return (new ProductResource($product))
            ->response()
            ->setStatusCode(201);
    }

    public function show(Product $product): JsonResponse
    {
        return (new ProductResource($product))->response();
    }

    public function update(Request $request, Product $product): JsonResponse
    {
        $validated = $request->validate([
            'name'        => 'sometimes|string|max:255',
            'description' => 'nullable|string',
            'price'       => 'sometimes|numeric|min:0',
            'stock'       => 'sometimes|integer|min:0',
        ]);

        $product->update($validated);

        return (new ProductResource($product))->response();
    }

    public function destroy(Product $product): JsonResponse
    {
        $product->delete();

        return response()->json([
            'message' => 'Product deleted successfully.',
        ]);
    }
}

Menguji API dengan Postman atau cURL

Contoh request menggunakan cURL:

# GET semua produk
curl -X GET http://localhost:8000/api/products \
  -H "Accept: application/json"

# POST produk baru
curl -X POST http://localhost:8000/api/products \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"Laptop","price":12000000,"stock":5}'

# PUT update produk
curl -X PUT http://localhost:8000/api/products/1 \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"price":11500000}'

# DELETE produk
curl -X DELETE http://localhost:8000/api/products/1 \
  -H "Accept: application/json"

Menangani Error dengan Response Konsisten

Untuk error handling yang rapi, kamu bisa menambahkan helper response di controller atau membuat trait khusus:

// Response sukses
return response()->json([
    'success' => true,
    'data'    => new ProductResource($product),
    'message' => 'Product created successfully.',
], 201);

// Response gagal validasi (otomatis oleh Laravel)
// Status 422 Unprocessable Entity

Kesimpulan

Kamu sudah berhasil membuat REST API CRUD lengkap di Laravel menggunakan Resource Controller, API Resource untuk formatting JSON, dan validasi bawaan Laravel. Langkah selanjutnya adalah menambahkan autentikasi menggunakan Laravel Sanctum agar endpoint API kamu terlindungi. Dengan struktur ini, API kamu sudah siap dikonsumsi oleh frontend React, Vue, atau aplikasi mobile.

rest api laravel crud api laravel laravel resource controller laravel api route laravel json response tutorial api laravel
Bagikan artikel
Kembali

Komentar (0)

Punya pertanyaan atau tambahan? Tulis di bawah โ€” tak perlu login.

Membalas komentarโ€ฆ batal

Belum ada komentar. Jadilah yang pertama!

๐Ÿš€ Partner Recommendation

Butuh Source Code & Aplikasi Premium?

Download aplikasi Laravel, POS, Sekolah, Klinik, ERP, dan source code siap pakai di GudangCode.

GudangCode
  • โœ” Source Code Premium
  • โœ” Sistem Siap Pakai
  • โœ” Lifetime Update
  • โœ” Membership Lifetime
  • โœ” Update Aplikasi Harian
Daftar Membership โ†’