Tutorial Membuat API dengan Laravel dan Sanctum

Free website hits

Tutorial Membuat API dengan Laravel dan Sanctum

Tutorial Membuat API dengan Laravel dan Sanctum
15 min read

Laravel adalah salah satu framework PHP yang paling populer dan powerful untuk pengembangan aplikasi web, termasuk API. Laravel Sanctum adalah paket otentikasi sederhana yang memungkinkan kita untuk mengamankan API dengan token. Dalam tutorial ini, kita akan membahas cara membuat API dengan Laravel dan Sanctum secara lengkap, mulai dari instalasi hingga implementasi otentikasi dan CRUD API.


1. Persiapan Proyek Laravel

1.1 Instalasi Laravel

Pastikan Anda sudah menginstal Composer di sistem Anda. Jika belum, unduh dari Composer.

Jalankan perintah berikut untuk membuat proyek Laravel baru:

composer create-project laravel/laravel api-laravel-sanctum

Masuk ke direktori proyek:

cd api-laravel-sanctum

Jalankan aplikasi:

php artisan serve

Laravel sekarang dapat diakses di http://127.0.0.1:8000.

2. Instalasi dan Konfigurasi Sanctum

Sanctum harus diinstal untuk mengelola autentikasi berbasis token. Jalankan perintah berikut:

composer require laravel/sanctum

Kemudian, jalankan perintah berikut untuk mempublikasikan konfigurasi Sanctum:

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

Selanjutnya, migrasikan database untuk membuat tabel terkait:

php artisan migrate

Tambahkan HasApiTokens pada model User agar dapat menggunakan token API:

use Laravel\Sanctum\HasApiTokens;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

Tambahkan middleware Sanctum di app/Http/Kernel.php pada bagian api:

protected $middlewareAliases = [
    'auth:sanctum' => \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
];

Terakhir, aktifkan middleware api di config/sanctum.php:

'guard' => ['web', 'api'],

3. Membuat API Autentikasi (Register, Login, Logout)

3.1 Membuat Controller Autentikasi

Buat controller untuk autentikasi dengan Sanctum:

php artisan make:controller AuthController

Buka app/Http/Controllers/AuthController.php dan tambahkan kode berikut:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;

class AuthController extends Controller
{
    // REGISTER
    public function register(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6',
        ]);

        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
        ]);

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

        return response()->json([
            'access_token' => $token,
            'token_type' => 'Bearer',
        ]);
    }

    // LOGIN
    public function login(Request $request)
    {
        $request->validate([
            'email' => 'required|string|email',
            'password' => 'required|string',
        ]);

        $user = User::where('email', $request->email)->first();

        if (!$user || !Hash::check($request->password, $user->password)) {
            throw ValidationException::withMessages([
                'email' => ['Email atau password salah.'],
            ]);
        }

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

        return response()->json([
            'access_token' => $token,
            'token_type' => 'Bearer',
        ]);
    }

    // LOGOUT
    public function logout(Request $request)
    {
        $request->user()->tokens()->delete();

        return response()->json(['message' => 'Logout berhasil']);
    }
}

3.2 Menambahkan Route API

Tambahkan route untuk autentikasi di routes/api.php:

use App\Http\Controllers\AuthController;

Route::post('/register', [AuthController::class, 'register']);
Route::post('/login', [AuthController::class, 'login']);

Route::middleware('auth:sanctum')->group(function () {
    Route::post('/logout', [AuthController::class, 'logout']);
});

4. Membuat API CRUD untuk Data Produk

4.1 Membuat Model dan Migration

Buat model dan migration untuk produk:

php artisan make:model Product -m

Edit file migration di database/migrations/xxxx_xx_xx_xxxxxx_create_products_table.php:

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

Jalankan migrasi:

php artisan migrate

4.2 Membuat Controller Produk

Buat controller:

php artisan make:controller ProductController

Tambahkan kode berikut di ProductController.php:

namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    public function index()
    {
        return response()->json(Product::all());
    }

    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'description' => 'required',
            'price' => 'required|numeric',
        ]);

        $product = Product::create($request->all());

        return response()->json($product, 201);
    }

    public function show(Product $product)
    {
        return response()->json($product);
    }

    public function update(Request $request, Product $product)
    {
        $product->update($request->all());

        return response()->json($product);
    }

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

        return response()->json(null, 204);
    }
}

4.3 Menambahkan Route API untuk Produk

Tambahkan route di routes/api.php:

use App\Http\Controllers\ProductController;

Route::middleware('auth:sanctum')->group(function () {
    Route::get('/products', [ProductController::class, 'index']);
    Route::post('/products', [ProductController::class, 'store']);
    Route::get('/products/{product}', [ProductController::class, 'show']);
    Route::put('/products/{product}', [ProductController::class, 'update']);
    Route::delete('/products/{product}', [ProductController::class, 'destroy']);
});

5. Testing API

Gunakan Postman atau cURL untuk menguji API. Pastikan Anda menyertakan token Bearer di header Authorization untuk endpoint yang memerlukan autentikasi.


Kesimpulan

Dalam tutorial ini, kita telah:
• Menginstal Laravel dan Sanctum
• Mengimplementasikan autentikasi dengan register, login, dan logout
• Membuat API CRUD untuk produk
• Mengamankan API dengan token

Sekarang, Anda memiliki API yang dapat digunakan untuk aplikasi mobile atau frontend berbasis Vue/React!

Recommended for you