Cara Membuat REST API dengan Laravel (Lengkap + Autentikasi Sanctum)

REST API memungkinkan aplikasi lain — aplikasi mobile (Android/iOS), frontend JavaScript (React/Vue), atau layanan pihak ketiga — berkomunikasi dengan backend Anda lewat pertukaran data JSON. Laravel adalah salah satu framework terbaik untuk membangun API. Artikel ini membahas cara membuat REST API dengan Laravel lengkap dengan autentikasi token.

Alur REST API Laravel
Alur REST API Laravel

Apa Bedanya API dengan Web Biasa?

Web biasa mengembalikan HTML (halaman untuk dilihat manusia), sedangkan API mengembalikan JSON (data untuk diproses aplikasi). Route API di Laravel diletakkan di file terpisah routes/api.php dan otomatis diberi prefix /api.

Langkah 1: Mendefinisikan Route API

Buka routes/api.php. Cukup satu baris untuk semua endpoint CRUD dengan apiResource:

<?php
use App\Http\Controllers\Api\ProdukController;

Route::apiResource('produk', ProdukController::class);
?>

Ini otomatis membuat endpoint: GET /api/produk (list), POST /api/produk (tambah), GET /api/produk/{id} (detail), PUT /api/produk/{id} (ubah), DELETE /api/produk/{id} (hapus).

Langkah 2: Membuat API Controller

php artisan make:controller Api/ProdukController --api
<?php
namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Produk;
use Illuminate\Http\Request;

class ProdukController extends Controller
{
    // GET /api/produk
    public function index()
    {
        return response()->json([
            'status' => 'success',
            'data'   => Produk::all(),
        ]);
    }

    // POST /api/produk
    public function store(Request $request)
    {
        $validated = $request->validate([
            'nama'  => 'required',
            'harga' => 'required|integer',
        ]);

        $produk = Produk::create($validated);

        return response()->json([
            'status' => 'success',
            'data'   => $produk,
        ], 201); // 201 = Created
    }

    // GET /api/produk/{id}
    public function show(Produk $produk)
    {
        return response()->json(['data' => $produk]);
    }

    // PUT /api/produk/{id}
    public function update(Request $request, Produk $produk)
    {
        $produk->update($request->all());
        return response()->json(['data' => $produk]);
    }

    // DELETE /api/produk/{id}
    public function destroy(Produk $produk)
    {
        $produk->delete();
        return response()->json(['message' => 'Produk dihapus'], 200);
    }
}
?>

Perhatikan Produk $produk pada parameter — ini “route model binding”: Laravel otomatis mencari produk berdasarkan id di URL, dan mengembalikan 404 bila tidak ditemukan.

Langkah 3: Merapikan Output dengan API Resource

Mengembalikan model langsung membocorkan semua kolom (termasuk yang sensitif). API Resource memberi kontrol penuh atas format JSON:

php artisan make:resource ProdukResource
<?php
namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class ProdukResource extends JsonResource
{
    public function toArray($request): array
    {
        return [
            'id'    => $this->id,
            'nama'  => $this->nama,
            'harga' => 'Rp' . number_format($this->harga, 0, ',', '.'),
        ];
    }
}
?>

Pakai di controller:

<?php
use App\Http\Resources\ProdukResource;

public function index()
{
    return ProdukResource::collection(Produk::all());
}
?>

Langkah 4: Autentikasi API dengan Sanctum

API sensitif harus dilindungi. Laravel Sanctum menyediakan autentikasi berbasis token. Install:

composer require laravel/sanctum
php artisan migrate

Buat endpoint login yang mengembalikan token:

<?php
public function login(Request $request)
{
    $user = User::where('email', $request->email)->first();

    if (!$user || !Hash::check($request->password, $user->password)) {
        return response()->json(['message' => 'Kredensial salah'], 401);
    }

    $token = $user->createToken('api-token')->plainTextToken;

    return response()->json(['token' => $token]);
}
?>

Lindungi route dengan middleware auth:sanctum:

<?php
Route::middleware('auth:sanctum')->group(function () {
    Route::apiResource('produk', ProdukController::class);
});
?>

Klien lalu mengirim token di header setiap request: Authorization: Bearer {token}.

Langkah 5: Menguji API

Gunakan Postman atau perintah curl:

curl -H "Authorization: Bearer TOKEN_ANDA" https://situsanda.com/api/produk

Status Code HTTP yang Penting

KodeArti
200OK (berhasil)
201Created (data dibuat)
401Unauthorized (token salah/tak ada)
404Not Found
422Unprocessable (validasi gagal)

Kesalahan Umum

  • Route API 404 — pastikan endpoint diakses dengan prefix /api.
  • Selalu 401 — token tidak dikirim di header Authorization: Bearer, atau Sanctum belum di-migrate.
  • Validasi mengembalikan HTML — pastikan request mengirim header Accept: application/json agar Laravel membalas JSON (kode 422).

Kesimpulan

Anda telah membangun REST API dengan Laravel yang lengkap: route apiResource, controller, API Resource untuk format JSON rapi, autentikasi token Sanctum, dan status code yang benar. API ini siap dikonsumsi aplikasi mobile maupun frontend modern. Ini adalah salah satu keahlian paling dicari di dunia kerja — kuasai, dan Anda bisa membangun backend untuk aplikasi apa pun.

Referensi: untuk pendalaman, kunjungi dokumentasi resmi Laravel.

Baca Juga

Ali Akbar

Software Developer yang fokus mengembangkan aplikasi berbasis Web dan Desktop. Senang mempelajari teknologi baru terutama di bidang web design dan web development.

View all posts by Ali Akbar →

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *