REST API CRUD di Laravel 8 dengan Sanctum - Menggunakan Server GNU/Linux


Assalamualaikum Wr.Wb...
dengan diberikan nikmat dan rezeki dari Allah SWT, saya Mr.Gagaltotal666 akan
berbagi kepada anda yaitu tentang cara REST API CRUD di Laravel 8
dengan Sanctum - Menggunakan Server GNU/Linux.

Melanjutkan artikel tutorial sebelumnya yaitu membuat
REST API authentication di laravel 8 dengan sanctum [disini],

disini kita akan simulasikan untuk membuat REST API CRUD 
dengan nama dari database data table Program beserta model. 
Learning Management System atau LMS, dan kita ingin mengelola
data program di LMS tersebut menggunakan REST API yang dibuat
menggunakan Sanctum package di Laravel 8.

oke lanjut ke text editor area.. ngoding let's gooo

langkah 1 : tambahkan Sanctum Middleware

 \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,

Kita harus menambahkan sanctum middleware
ke api middleware group di dalam file app/Http/Kernel.php.
atau bisa juga hapus tanda coment tag php karena di laravel 8
versi terbaru class laravel sanctum sudah ada namun
di matikan dengan tag coment, Middleware ini bertanggung jawab
untuk memastikan bahwa setiap request yang masuk dapat
diautentikasi menggunakan cookie laravel session,
sambil tetap mengizinkan permintaan dari pihak ketiga
untuk diautentikasi menggunakan API token.

Langkah 2 : Buat Model & Migration

$ php artisan make:model Program -m

Di langkah kedua ini kita perlu membuat
file model dan migration untuk Program.
Jalankan perintah artisan seperti di atas
untuk generate dua file Program model dan migration.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Program extends Model
{
use HasFactory;

protected $guarded = [];
}

Setelah berhasil generate file Program model,
sekarang buka file tersebut dan tambahkan kode di atas.

<?php

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

class CreateProgramsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('programs', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('desc');
$table->timestamps();
});
}

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


Selanjutnya kita perlu setup file migration Program
yang telah digenerate sebelumnya. Buka file tersebut di direktori
database/migrations/2022-9-30_create_programs_table.php.
Kemudian pada method up, ubah kodenya menjadi seperti
contoh di atas. Di file program migrations ini,
kita hanya menambahkan dua field yaitu name dan desc.

selanjut nya kita migrate

$ php artisan migrate

Langkah 3 : Buat API Resource

$ php artisan make:resource ProgramResource

Untuk membuat atau generate resource class,
kita dapat menggunakan perintah artisan make:resource
seperti di atas. By default, resource akan ditempatkan
di direktori app/Http/Resources dari aplikasi
atau laravel project kita. API resource akan
extend Illuminate\Http\Resources\Json\JsonResource class.

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class ProgramResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{

return [
'id' => $this->id,
'name' => $this->name,
'desc' => $this->desc,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];

}
}


Setelah berhasil generate file ProgramResource,
sekarang buka file tersebut dan ubah kode yang ada
(tepatnya pada method toArray) menjadi seperti kode di atas.

Setiap resource class mendefinisikan method toArray
yang me-return attribute array yang harus dikonversi ke JSON
ketika resource dikembalikan sebagai response
dari route atau controller. Kita dapat mengakses model properties
langsung dari variable $this.
karena resource class akan secara otomatis mem-proxy property
dan akses method ke model yang mendasari untuk akses
yang mudah. Setelah resource didefinisikan,
resource tersebut dapat direturn dari route atau controller.

Langkah 4 : Buat Controller

$ php artisan make:controller API/ProgramController

Kemudian kita perlu membuat controller baru untuk 
membuat logic CRUD dengan REST API Sanctum. 
Jalankan perintah artisan seperti di atas untuk membuat 
file ProgramController.php di dalam direktori app/Http/Controllers/API.

<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Validator;
use App\Models\Program;
use App\Http\Resources\ProgramResource;

class ProgramController extends Controller
{
// kita buat lest gooo
public function index()
{
$data = Program::latest()->get();
return response()->json([ ProgramResource::collection($data), 'Program ada ya.' ]);
}

//aksi tambah
public function store(Request $request)
{
$validator = Validator::make($request->all(),[
'name' => 'required|string|max:255',
'desc' => 'required'
]);

$program = Program::create([
'name' => $request->name,
'desc' => $request->desc,
]);

return response()->json([ 'Program Berhasil di tambah ya.', new ProgramResource($program)]);

}

//aksi show by id
public function show($id)
{

$program = Program::find($id);
if(is_null($program)){
return response()->json('Data tidak ada', 404);
}
return response()->json([ new ProgramResource($program)]);
}

//aksi untuk update/edit
public function update(Request $request, Program $program)
{
$validator = Validator::make($request->all(),[
'name' => 'required|string|max:255',
'desc' => 'required'
]);

if($validator->fails()){
return response()->json($validator->errors());
}

$program->name = $request->name;
$program->desc = $request->desc;
$program->save();

return response()->json([ 'Program berhasil di update.', new ProgramResource($program)]);

}

//aksi delete
public function destroy(Program $program)
{
$program->delete();
return response()->json('Program berhasil di hapus');
}

}

<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Validator;
use App\Models\Program;
use App\Http\Resources\ProgramResource;

class ProgramController extends Controller
{
    // kita buat lest gooo
    public function index()
    {
        $data = Program::latest()->get();
        return response()->json([ ProgramResource::collection($data), 'Program ada ya.' ]);
    }

    //aksi tambah
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(),[
            'name' => 'required|string|max:255',
            'desc' => 'required'
        ]);

        $program = Program::create([
            'name' => $request->name,
            'desc' => $request->desc,
        ]);

        return response()->json([ 'Program Berhasil di tambah ya.', new ProgramResource($program)]);

    }

    //aksi show by id
    public function show($id)
    {

        $program = Program::find($id);
        if(is_null($program)){
            return response()->json('Data tidak ada', 404);
        }
        return response()->json([ new ProgramResource($program)]);
    }

    //aksi untuk update/edit
    public function update(Request $request, Program $program)
    {
        
        $validator = Validator::make($request->all(),[
            'name' => 'required|string|max:255',
            'desc' => 'required'
        ]);

        if($validator->fails()){
            return response()->json($validator->errors());
        }

        $program->name = $request->name;
        $program->desc = $request->desc;
        $program->save();

        return response()->json([ 'Program berhasil di update.', new ProgramResource($program)]);

    }

    //aksi delete
    public function destroy(Program $program)
    {
        $program->delete();
        return response()->json('Program berhasil di hapus');
    }
}

Setelah berhasil generate file ProgramController.php,
sekarang buka file controller tersebut dan ubah kode
yang ada menjadi seperti kode di atas.
Di file ProgramController.php ini,
kita membuat method index, store, update, show dan destroy.

Penjelasan singkat dari 4 method tersebut :

- Index, method ini digunakan membuat logic
untuk menampilkan semua data dari table programs.
- Store, method ini berfungsi untuk menambahkan data
dari request ke table programs. Di method ini juga
dilengkapi dengan data validation.
- Show, berfungsi untuk menampilkan detail
data program berdasarkan id.
- Update, berfungsi untuk menerima data request
dan memperbarui data program (berdasarkan id)
dengan data request yang baru.
- Delete, method ini berfungsi untuk menghapus
data program berdasarkan id data yang dikirimkan.

Langkah 5: Buat REST API Routes

Route::resource('program', ProgramController::class);

Selanjutnya, tambahkan route baru seperti di atas
untuk CRUD program dengan REST API sanctum di laravel 8.
Tambahkan kode tersebut di dalam route::group yang diproteksi
dengan middleware atau sejajar dengan Route::post('/logout').

contoh :

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

use App\Http\Controllers\API\AuthController;
use App\Http\Controllers\API\ProgramController;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

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

//protect route pake midlware
Route::group([ 'middleware' => ['auth:sanctum']], function() {
Route::get('/profile', function(Request $request){
return auth()->user();
});

Route::resource('program', ProgramController::class);

//api route logout user
Route::post('/logout', [AuthController::class, 'logout']);
});

Langkah 6: Testing
Oke, waktunya untuk testing atau menguji REST API CRUD
yang telah kita buat dengan sanctum package di laravel 8.
Pada pengujian ini, kita akan coba untuk create data, show data,
update data, delete data dan menampilkan semua
data program menggunakan Postman.






jika masih kurang paham, saya sudah membuatkan video tutorial
silakan nonton yak video nya, dibawah ini


oke mungkin itu saja mengenai Rest API crud di laravel
kalau ada kesalahan dan kekurangan nya
mohon berikan masukan nya ya

sekian dan semoga bermanfaat...

Wasalamualaikum Wr.Wb...

Sumber : [laravel doc] [codelapan]

Post a Comment

0 Comments