Cara Membuat Rest API di Laravel 11 dengan Sanctum

Cara membuat Rest API di laravel 11 dengan sanctum


Cara Membuat Rest API di Laravel 11 dengan Sanctum - Selamat malam sobs-sobs sekalian semoga kalian dalam keadaan sehat selalu dan masih diberi kekuatan untuk membuat kopi hitam panas. sruputtt ahh enak sekali (mantabs). oke pada kesempatan kali ini kita berkutat lagi dengan si nona cantik, siapa lagi kalo bukan nona Laravel. semakin hari nona ini semakin cantik dengan kata lain semakin baru versinya ada saja fitur-fitur baru, atau fitur-fitur lama mendapatkan improvisasi.

Seperti judulnya pada kesempatan kali ini gua akan share tentang cara membuat API di nona Laravel, khususnya versi 11 atau versi terbaru pada saat gua menulis artikel ini. dan alasan kenapa gua tambahkan sanctum karena biasanya sepaket sobs-sobs. karena gua ingin membuat api dimana setiap yang mengakses api tersebut adalah user yang sudah terautentifikasi anggap saja resource api yang kita buat itu penting sehingga tidak menjadi konsumsi publik. yosh langsung saja sobs.



1.    Setup dan Konfigurasi Project

Pertama-tama tentu adalah kita setup project kalian, disini gua menggunakan composer sobs. untuk nama projectnya bebas, terserah sobs-sobs.
composer create-project laravel/laravel sruputkode-api
diatas gua namakan project yaitu sruputkode-api, tunggu sampai proses download project selesai sobs.

Jika sudah silahkan buka project tersebut di text editor sobs-sobs, kebetulan gua menggunakan visual studio code.

selajutnya kita akan melakukan beberapa konfigurasi, silahkan sobs-sobs

1.1    Buat Database

Silahkan sobs-sobs buat databasenya. disini gua akan buat database dengan nama sruputkode-api.

1.2    Konfigurasi .ENV

Sekarang kita konfigurasi file .env silahkan sesuaikan dengan database sebelumnya sudah dibuat. dan juga di file .env ini gua ubah settingan APP_TIMEZONE=Asia/Jakarta.


APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:ZA2wtV5IibW4Fk/5b/uz0erdTopPs+cCTTMC2AhnyMY=
APP_DEBUG=true
APP_TIMEZONE=Asia/Jakarta
APP_URL=http://localhost

APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US

APP_MAINTENANCE_DRIVER=file
# APP_MAINTENANCE_STORE=database

PHP_CLI_SERVER_WORKERS=4

BCRYPT_ROUNDS=12

LOG_CHANNEL=stack
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=sruputkode-api
DB_USERNAME=root
DB_PASSWORD=

SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null

BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=database

CACHE_STORE=database
CACHE_PREFIX=

MEMCACHED_HOST=127.0.0.1

REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_MAILER=log
MAIL_SCHEME=null
MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false

VITE_APP_NAME="${APP_NAME}"


1.3    Install api

Secara default pada saat kita membuat project laravel 11 route api tidak ada. untuk menampilkan route api kita perlu menggunakan artisan command dimana artisan ini juga akan menginstall package diperlukan seperti sanctum.

php artisan install:api

Tunggu sampai proses selesai. maka akan ada file baru routes/api.php.

1.4    Konfigurasi scantum

jika dirasa proses sebelum sudah selesai maka langkah selanjutnya kita akan edit file app/Models/User.php kita akan menambahkan trait dari scantum ini ke dalam model user.

<?php

namespace App\Models;

// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

# Menambahkan trait scantum
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    /** @use HasFactory<\Database\Factories\UserFactory> */

    # tambahkan HasApiTokens
    use HasFactory, Notifiable, HasApiTokens;

    /**
     * The attributes that are mass assignable.
     *
     * @var list<string>
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var list<string>
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * Get the attributes that should be cast.
     *
     * @return array<string, string>
     */
    protected function casts(): array
    {
        return [
            'email_verified_at' => 'datetime',
            'password' => 'hashed',
        ];
    }
}


oke untuk sesi setup dan konfigurasi project selesai. kita akan lanjut ke sesi berikutnya.

2.    Buat dan konfigurasi model, file migrasinya dan seedernya.

2.1    Membuat model dan file migrasi employee

disini gua akan buat model dengan nama Employee beserta file migrasinya sobs-sobs. untuk membuatnya silahkan jalankan command seperti dibawah ini.

php artisan make:model Employee --migration

jika sudah selesai maka akan ada file baru yaitu app/Models/Employee.php dan file migrasinya, sobs-sobs bisa mengecek file migrasinya di database/migrations cari file yang mengandung kata employess_table.

2.2    Ubah file migration

sekarang kita ubah file employess_table migartion, silahkan sobs-sobs buka kemudian sesuaikan seperti dibawah ini.

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('employees', function (Blueprint $table) {
            $table->id();
            $table->string('employee_id', 6)->nullable(false)->unique();
            $table->string('full_name', 150)->nullable(false);
            $table->string('place_of_birth', 150)->nullable(false);
            $table->date('date_of_birth')->nullable(false);
            $table->enum("gender", ['male', 'female'])->nullable(false)->default('male');
            $table->string('phone_number', 12)->nullable(true);
            $table->text('address')->nullable(true);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('employees');
    }
};



kita beranjak ketahap selanjutnya.

2.3    Ubah file model Employee

Sekarang kita buka file modelnya  app/Models/Employee.php,  kita tambahkan beberapa property dan juga method.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model
{
    # property untuk proteksi kolom id.
    protected $guarded = ['id'];


    # untuk route model binding berdasarkan kolom employee_id bukan id
    public function getRouteKeyName()
    {
        return 'employee_id';
    }
}


kemudian kita akan buat file seeder untuk User.

2.4    Buat file User seeder 

oke next step adalah kita buat file seeder untuk User, kita bisa menggunakan perintah seperti dibawah ini ya sobs.

php artisan make:seeder UserSeeder

jika proses selesai maka ada file baru UserSeeder.php di database/seeders. silahkan buka file tersebut

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
# tambahkan user model
use App\Models\User;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        User::create([
            'name' => 'Sruputkode',
            'email' => 'sruputkode@outlook.co.id',
            'password' => bcrypt('password1112'),
        ]);
    }
}


jalankan seedernya dengan perintah : 

php artisan db:seed --class=UserSeeder

untuk memastikan silahkan dicek ditable users apakah sudah ada data baru.


2.5    Buat file Employee Seeder

sekarang kita buat seeder untuk employee, dengan menggunakan perintah dibawah ini : 

php artisan make:seeder EmployeeSeeder

oke, sekarang buka file EmployeeSeeder.php yang berdada di database/seeders.

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
# tambahkan employee model
use App\Models\Employee;

class EmployeeSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        Employee::create([
            'employee_id' => '1011AA',
            'full_name' => 'Reynaldi Santos',
            'place_of_birth' => 'Semarang',
            'date_of_birth' => '1995-01-28',
            'gender' => 'male',
            'phone_number' => '081717171717',
            'address' => 'JL Kampung Bulak No.20'
        ]);

        Employee::create([
            'employee_id' => '1011AB',
            'full_name' => 'Kim Syntia Rani',
            'place_of_birth' => 'Jakarta',
            'date_of_birth' => '1999-10-28',
            'gender' => 'female',
            'phone_number' => '081212121212',
            'address' => 'JL Kampung Rambutan No.1A'
        ]);
    }
}



Berikutnya kita migrate dulu table employees dengan perintah :

php artisan migrate


Selanjutnya kita jalankan seedernya.

php artisan db:seed --class=EmployeeSeeder

jika sudah periksa kembali di database table employees lihat apakah ada data baru.



3.    Auth Controller dan Testing

3.1    Buat Auth Controller

Sekarang kita buat auth controller fungsi dari controller ini adalah untuk proses authentifikasi user, baik itu login ataupun logout.

php artisan make:controller Api/AuthController

selanjutnya buka file AuthController.php lokasinya di app/Http/Controllers/Api

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;

class AuthController extends Controller
{
    public function login(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'email' => 'required|email',
            'password' => 'required'
        ]);

        # jika validasi input gagal
        if ($validator->fails())
        {
            return response()->json([
                'status' => false,
                'message' => 'Upsss something wrong with your input !!!',
                'errors' => $validator->errors()->all()
            ], 422);
        }

        # cek username dan password
        if (! Auth::attempt($request->only('email', 'password')))
        {
            # jika username dan password salah
            return response()->json([
                'status' => false,
                'message' => 'Invalid Credentials !!!'
            ], 401);
        }


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

        # hapus token jika sebelumnya sudah ada
        $user->tokens()->delete();

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

        return response()->json([
            'status' => true,
            'message' => 'login successful',
            'user' => $user,
            'token_type' => 'Bearer',
            'token' => $token,
        ]);

    }

    function logout()
    {
        Auth::user()->tokens()->delete();
        return response()->json([
            'status' => true,
            'message' => 'logout was successful',
        ]);
    }
}


tahap selajutnya kita akan setting route.

3.2    Setting route

sekarang buka file api.php di folder routes. kemudian gua ubah seperti dibawah ini sobs :

<?php

use App\Http\Controllers\Api\AuthController;
use Illuminate\Support\Facades\Route;


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

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

lanjut kita test.

3.3    Test Auth Login

Dalam test ini kita akan menggunakan aplikasi postman. jika sobs-sobs belum ada silahkan download terlebih dahulu, dan jangan lupa jalankan aplikasinya.

php artisan serve


Test Login.


Jika berhasil maka tampilannya akan seperti dibawah ini :


Perhatikan token field, token ini yang akan digunakan sebagai autentifikasi.

3.4    Test Auth Logout

Sekarang kita akan melakukan uji coba proses logout.


untuk method test kita gunakan method post, dan jangan lupa dibagian Authorization pilih Auth Type Bearer Token dan jangan lupa kita masukan token. token kita dapatkan pada saat proses login. seperti gambar diatas.


Jika berhasil maka response akan seperti gambar diatas sobs. oke kita sudah selesaikan konfigurasi dan test auth. sekarang kita akan fokus ke resource utama yaitu employee.

4.    Employee Controller dan Testing

4.1     Buat Employe Controller dan setting route

sekarang kita buat controller Employee, jalankan perintah dibawah ini.

php artisan make:controller Api/EmployeeController

selanjutnya buka file EmployeeController.php di app/Http/Controllers/Api.

<?php

namespace App\Http\Controllers\Api;

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

class EmployeeController extends Controller
{
    # Fetch all employee data.
    public function index()
    {
        $employees = Employee::orderBy('id', 'desc')->get();

        return response()->json([
            'status' => true,
            'message' => 'Employee List',
            'data' => $employees
        ], 200);
    }
}


kemudian kita buka file api.php  yang berlokasi di folder routes. dan ubah seperti dibawah ini :

<?php

use App\Http\Controllers\Api\AuthController;
use App\Http\Controllers\Api\EmployeeController;
use Illuminate\Support\Facades\Route;


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

Route::middleware('auth:sanctum')->group(function() {
    Route::post('logout', [AuthController::class, 'logout']);
    
    // Menambahkan route resource
    Route::apiResource('employees', EmployeeController::class);
});

disini kita tambahkan route api resource untuk model employee, silahkan stop dahulu servernya kemudian silahkan sobs-sobs lihat list routenya dengan perintah dibawah ini :


php artisan route:list

maka tampilannya akan seperti dibawah ini :


4.2    Test get all data

setelah semua selesai sekarang kita melakukan test. hal pertama adalah kita harus login terlebih dahulu untuk medapatkan token. silahkan sobs-sobs jalankan servernya kembali.

jika sudah maka kita akan mendapatkan token kembali seperti gambar dibawah ini.


sekarang silahkan new tab di postman, kita coba ambil semua data employee jangan lupa dibagian auth type ganti menjadi Bearer Token dan isi kolom tokennya dengan token yang kita dapatkan pada saat proses login tadi.



selanjutnya coba kita klik tombol send, dan jika berhasil maka tampilannya akan seperti dibawah ini :



untuk lebih jelasnya json response seperti dibawah ini :

{
    "status": true,
    "message": "Employee List",
    "data": [
        {
            "id": 2,
            "employee_id": "1011AB",
            "full_name": "Kim Syntia Rani",
            "place_of_birth": "Jakarta",
            "date_of_birth": "1999-10-28",
            "gender": "female",
            "phone_number": "081212121212",
            "address": "JL Kampung Rambutan No.1A",
            "created_at": "2025-01-26T13:49:33.000000Z",
            "updated_at": "2025-01-26T13:49:33.000000Z"
        },
        {
            "id": 1,
            "employee_id": "1011AA",
            "full_name": "Reynaldi Santos",
            "place_of_birth": "Semarang",
            "date_of_birth": "1995-01-28",
            "gender": "male",
            "phone_number": "081717171717",
            "address": "JL Kampung Bulak No.20",
            "created_at": "2025-01-26T13:49:33.000000Z",
            "updated_at": "2025-01-26T13:49:33.000000Z"
        }
    ]
}
kita beranjak ke proses selajutnya.

4.3    Test get one data

Jika kita sudah berhasil mendapatkan semua data employee, selanjutnya kita get once artinya kita ambil hanya satu data saja, silahkan buka kembali EmployeeController.php kemudian kita tambahkan method show seperti dibawah ini.

<?php

namespace App\Http\Controllers\Api;

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

class EmployeeController extends Controller
{
    # Fetch all employee data.
    public function index()
    {
        $employees = Employee::orderBy('id', 'desc')->get();

        return response()->json([
            'status' => true,
            'message' => 'Employee List',
            'data' => $employees
        ], 200);
    }

    # fetch one employee data
    public function show(Employee $employee)
    {
        return response()->json([
            'status' => true,
            'message' => 'Employee Data Details',
            'data' => $employee
        ]);
    }

}


jika sudah kita akan lakukan test. silahkan sobs-sobs buka lagi postmannya.



untuk urlnya : api/resource/emloyee_id ingat ya sobs employe_id bukan id, karena kita sudah mengubah route model bindingnya ke kolom employee_id di model Employee kita.
kita test saja maka kalau berhasil maka tampilannya akan seperti dibawah ini :



Untuk lebih detail jsonnya akan seperti dibawah ini :


{
    "status": true,
    "message": "Employee Data Details",
    "data": {
        "id": 2,
        "employee_id": "1011AB",
        "full_name": "Kim Syntia Rani",
        "place_of_birth": "Jakarta",
        "date_of_birth": "1999-10-28",
        "gender": "female",
        "phone_number": "081212121212",
        "address": "JL Kampung Rambutan No.1A",
        "created_at": "2025-01-26T13:49:33.000000Z",
        "updated_at": "2025-01-26T13:49:33.000000Z"
    }
}

next kita akan berkutat untuk penambahan data.

4.4    Test add new data

Sekarang kita masuk ke tahap tambah data, silahkan sobs-sobs buka kembali EmployeeController.php kita akan menabhkan method store. jika sudah maka sesuaikan seperti dibawah ini :

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Employee;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class EmployeeController extends Controller
{
    # Fetch all employee data.
    public function index()
    {
        $employees = Employee::orderBy('id', 'desc')->get();

        return response()->json([
            'status' => true,
            'message' => 'Employee List',
            'data' => $employees
        ], 200);
    }

    # fetch one employee data
    public function show(Employee $employee)
    {
        return response()->json([
            'status' => true,
            'message' => 'Employee Data Details',
            'data' => $employee
        ]);
    }

    # add new employee data
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'employee_id' => 'required|alpha_num:ascii|size:6|unique:employees,employee_id',
            'full_name' => 'required',
            'place_of_birth' => 'required',
            'date_of_birth' => 'required',
            'gender' => 'required|in:male,female',
            'phone_number' => 'nullable',
            'address' => 'nullable'
        ]);

        if ($validator->fails())
        {
            return response()->json([
                'status' => false,
                'message' => 'Upsss something wrong with your input !!!',
                'errors' => $validator->errors()->all()
            ], 422);
        }

        $employee = Employee::create([
            'employee_id' => $request->employee_id,
            'full_name' => $request->full_name,
            'place_of_birth' => $request->place_of_birth,
            'date_of_birth' => $request->date_of_birth,
            'gender' => $request->gender,
            'phone_number' => $request->has('phone_number') ? $request->phone_number : null,
            'address' => $request->has('address') ? $request->address : null,
        ]);

        return response()->json([
            'status' => true,
            'message' => 'Successfully added new employee data.',
            'data' => $employee
        ], 201);
    }

}


oke jika sudah sekarang kita beranjak ke postman. silahkan new tab dan lakukan penambahan data seperti dibawah ini :


jangan lupa dibagian Authorization pilih auth_type Bearer Token dan masukan kembali tokennya ya sobs sama seperti kita get all employee data dan get one employee data. kemudia tingal klik send. jika berhasil maka tampilannya seperti dibawah ini :


detail json resultnya :

{
    "status": true,
    "message": "Successfully added new employee data.",
    "data": {
        "employee_id": "1011AC",
        "full_name": "Syntia Monroe",
        "place_of_birth": "Los Angles",
        "date_of_birth": "1999-08-08",
        "gender": "female",
        "phone_number": "081213141516",
        "address": "Komplek Hollywood Kav 12 No. 100",
        "updated_at": "2025-01-26T14:23:15.000000Z",
        "created_at": "2025-01-26T14:23:15.000000Z",
        "id": 3
    }
}

oke next stage adalah kita lakukan update data.

4.5    Test update data

silahkan buka kembali EmployeeController.php nya kali ini kita akan tambahkan method update.

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Employee;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class EmployeeController extends Controller
{
    # Fetch all employee data.
    public function index()
    {
        $employees = Employee::orderBy('id', 'desc')->get();

        return response()->json([
            'status' => true,
            'message' => 'Employee List',
            'data' => $employees
        ], 200);
    }

    # fetch one employee data
    public function show(Employee $employee)
    {
        return response()->json([
            'status' => true,
            'message' => 'Employee Data Details',
            'data' => $employee
        ]);
    }

    # add new employee data
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'employee_id' => 'required|alpha_num:ascii|size:6|unique:employees,employee_id',
            'full_name' => 'required',
            'place_of_birth' => 'required',
            'date_of_birth' => 'required',
            'gender' => 'required|in:male,female',
            'phone_number' => 'nullable',
            'address' => 'nullable'
        ]);

        if ($validator->fails())
        {
            return response()->json([
                'status' => false,
                'message' => 'Upsss something wrong with your input !!!',
                'errors' => $validator->errors()->all()
            ], 422);
        }

        $employee = Employee::create([
            'employee_id' => $request->employee_id,
            'full_name' => $request->full_name,
            'place_of_birth' => $request->place_of_birth,
            'date_of_birth' => $request->date_of_birth,
            'gender' => $request->gender,
            'phone_number' => $request->has('phone_number') ? $request->phone_number : null,
            'address' => $request->has('address') ? $request->address : null,
        ]);

        return response()->json([
            'status' => true,
            'message' => 'Successfully added new employee data.',
            'data' => $employee
        ], 201);
    }

    # update employee data
    public function update(Request $request, Employee $employee)
    {
        $validator = Validator::make($request->all(), [
            'full_name' => 'required',
            'place_of_birth' => 'required',
            'date_of_birth' => 'required',
            'gender' => 'required|in:male,female',
            'phone_number' => 'nullable',
            'address' => 'nullable'
        ]);

        if ($validator->fails())
        {
            return response()->json([
                'status' => false,
                'message' => 'Upsss something wrong with your input !!!',
                'errors' => $validator->errors()->all()
            ], 422);
        }

        $employee->update([
            'full_name' => $request->full_name,
            'place_of_birth' => $request->place_of_birth,
            'date_of_birth' => $request->date_of_birth,
            'gender' => $request->gender,
            'phone_number' => $request->has('phone_number') ? $request->phone_number : null,
            'address' => $request->has('address') ? $request->address : null,
        ]);

        return response()->json([
            'status' => true,
            'message' => 'Successfully updated employee data.',
            'data' => $employee
        ], 200);

    }

}

buka kembali postman dan new tab. seperti biasa jangan lupa tambahkan Bearer Token nya. kali ini kita akan update data, dan pilihan data yang akan diupdate adalah data yang baru saja kita tambahkan yaitu
Syntia Monroe dengan employee_id : 1011AC, oleh karena itu maka urlnya menjadi api/employees/1011AC dan method yang kita gunakan adalah POST. untuk field update akan seperti dibawah ini :


lihat gambar diatas sobs disitu ada penambahan Field yaitu _method : PUT ini ditambahkan agar supaya laravel mengidentifikasi bahwa ini adalah proses update. silahkan klik tombol send, jika berhasil maka tampilannya akan seperti dibawah ini sobs :


json detailnya : 

{
    "status": true,
    "message": "Successfully updated employee data.",
    "data": {
        "id": 3,
        "employee_id": "1011AC",
        "full_name": "Syntia Ajah",
        "place_of_birth": "Pekalongan",
        "date_of_birth": "1999-08-08",
        "gender": "female",
        "phone_number": "081213141516",
        "address": "Kampung Rawa Utara No. 40 A",
        "created_at": "2025-01-26T14:23:15.000000Z",
        "updated_at": "2025-01-26T14:45:12.000000Z"
    }
}

tahap akhir adalah delete data.

4.6    Test delete data

Tahap akhir yaitu kita delete data silahkan buka kembali EmployeeController.php nya disini kita akan menambahkan method destroy, method ini berfungsi untuk menghapus data.

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Employee;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class EmployeeController extends Controller
{
    # Fetch all employee data.
    public function index()
    {
        $employees = Employee::orderBy('id', 'desc')->get();

        return response()->json([
            'status' => true,
            'message' => 'Employee List',
            'data' => $employees
        ], 200);
    }

    # fetch one employee data
    public function show(Employee $employee)
    {
        return response()->json([
            'status' => true,
            'message' => 'Employee Data Details',
            'data' => $employee
        ]);
    }

    # add new employee data
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'employee_id' => 'required|alpha_num:ascii|size:6|unique:employees,employee_id',
            'full_name' => 'required',
            'place_of_birth' => 'required',
            'date_of_birth' => 'required',
            'gender' => 'required|in:male,female',
            'phone_number' => 'nullable',
            'address' => 'nullable'
        ]);

        if ($validator->fails())
        {
            return response()->json([
                'status' => false,
                'message' => 'Upsss something wrong with your input !!!',
                'errors' => $validator->errors()->all()
            ], 422);
        }

        $employee = Employee::create([
            'employee_id' => $request->employee_id,
            'full_name' => $request->full_name,
            'place_of_birth' => $request->place_of_birth,
            'date_of_birth' => $request->date_of_birth,
            'gender' => $request->gender,
            'phone_number' => $request->has('phone_number') ? $request->phone_number : null,
            'address' => $request->has('address') ? $request->address : null,
        ]);

        return response()->json([
            'status' => true,
            'message' => 'Successfully added new employee data.',
            'data' => $employee
        ], 201);
    }

    # update employee data
    public function update(Request $request, Employee $employee)
    {
        $validator = Validator::make($request->all(), [
            'full_name' => 'required',
            'place_of_birth' => 'required',
            'date_of_birth' => 'required',
            'gender' => 'required|in:male,female',
            'phone_number' => 'nullable',
            'address' => 'nullable'
        ]);

        if ($validator->fails())
        {
            return response()->json([
                'status' => false,
                'message' => 'Upsss something wrong with your input !!!',
                'errors' => $validator->errors()->all()
            ], 422);
        }

        $employee->update([
            'full_name' => $request->full_name,
            'place_of_birth' => $request->place_of_birth,
            'date_of_birth' => $request->date_of_birth,
            'gender' => $request->gender,
            'phone_number' => $request->has('phone_number') ? $request->phone_number : null,
            'address' => $request->has('address') ? $request->address : null,
        ]);

        return response()->json([
            'status' => true,
            'message' => 'Successfully updated employee data.',
            'data' => $employee
        ], 200);

    }

    # delete employe data
    public function destroy(Employee $employee)
    {
        $employee->delete();
        return response()->json([
            'status' => true,
            'message' => 'Successfully deleted employee data.',
            'data' => null,
        ], 200);
    }

}


buka postman kembali dan new tab, sekarang kita akan delete data yang baru saja kita update yaitu data dengan employee_id : 1011AC dan jangan lupa disaat kita melakukan operasi baik itu get, update atau delete data selalu tambahkan Authorizationnya Bearer dan Tokennya.


perhatikan kali ini methodnya adalah delete dan alamat urlnya : api/employees/employee_id. silahkan sobs-sobs test, dan jika berhasil maka tampilan responsenya akan seperti dibawah ini :


detail jsonnya seperti dibawah ini :

{
    "status": true,
    "message": "Successfully deleted employee data.",
    "data": null
}


Akhirnya kita sudah menuntaskan untuk proses create, read, update dan delete rest Api di Laravel 11.

Oke mungkin sekian dahulu pembahasannya sobs-sobs, jika ada yang kurang jelas silahkan bertanya dikolom komentar atau sobs-sobs dapat mencari refrensi di sumber lainnya.

Sekian dan terimakasih sobs-sobs.

See you next time.

Posting Komentar untuk "Cara Membuat Rest API di Laravel 11 dengan Sanctum"

www.domainesia.com
Web Hosting
www.domainesia.com