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.

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
| Kode | Arti |
|---|---|
| 200 | OK (berhasil) |
| 201 | Created (data dibuat) |
| 401 | Unauthorized (token salah/tak ada) |
| 404 | Not Found |
| 422 | Unprocessable (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/jsonagar 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.

