Membuat REST API CRUD di Laravel 8 dengan Sanctum

Membuat REST API CRUD di Laravel 8 dengan Sanctum

Admin
Admin・ 18 September 2021
11 min read ・ 28293 views
Series: Laravel Sanctum

REST API CRUD Laravel 8 Sanctum - Melanjutkan artikel tutorial sebelumnya yaitu membuat REST API authentication di laravel 8 dengan sanctum, di artikel ini saya akan share tutorial cara membuat REST API CRUD menggunakan sanctum.

Baca: Laravel 8: REST API Authentication dengan Sanctum

Di tutorial ini, kita simulasikan untuk membuat REST API CRUD data Program. Bayangkan saja kita mempunyai 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, mari kita langsung saja ke koding. 👇 👨‍💻

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. 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.

protected $guarded = [];

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

 public function up()
    {
        Schema::create('programs', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->text('desc');
            $table->timestamps();
        });
    }

Selanjutnya kita perlu setup file migration Program yang telah digenerate sebelumnya. Buka file tersebut di direktori database/migrations/xxxx_xx_xx_xxxxxx_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.

php artisan migrate

Jika sudah menyelesaikan setup file migration, sekarang jalankan perintah php artisan migrate untuk memigrasi semua file migration ke database.

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. Ini 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
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $data = Program::latest()->get();
        return response()->json([ProgramResource::collection($data), 'Programs fetched.']);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(),[
            'name' => 'required|string|max:255',
            'desc' => 'required'
        ]);

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

        $program = Program::create([
            'name' => $request->name,
            'desc' => $request->desc
         ]);
        
        return response()->json(['Program created successfully.', new ProgramResource($program)]);
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $program = Program::find($id);
        if (is_null($program)) {
            return response()->json('Data not found', 404); 
        }
        return response()->json([new ProgramResource($program)]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    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 updated successfully.', new ProgramResource($program)]);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(Program $program)
    {
        $program->delete();

        return response()->json('Program deleted successfully');
    }
}

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 keempat 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('programs', App\Http\Controllers\API\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').

<?php

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

/*
|--------------------------------------------------------------------------
| 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 for register new user
Route::post('/register', [App\Http\Controllers\API\AuthController::class, 'register']);
//API route for login user
Route::post('/login', [App\Http\Controllers\API\AuthController::class, 'login']);

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

    Route::resource('programs', App\Http\Controllers\API\ProgramController::class);

    // API route for logout user
    Route::post('/logout', [App\Http\Controllers\API\AuthController::class, 'logout']);
});

Maka secara keseluruhan, kode di routes/api.php sekarang menjadi seperti di atas.

Langkah 6: Testing

Oke, setelah melalui langkah-langkah mulai dari menambahkan sanctum middleware sampai di langkah 5 yaitu menambahkan REST API route, sekarang adalah 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.

Create Data dengan Sanctum API

Set authorization token

Testing yang pertama, kita akan melakukan create data atau menambahkan data program menggunakan Postman. Tapi sebelum melakukannya, pastikan sudah login dan mendapatkan token. Kemudian pada langkah awal, kita set authorization token dengan membuka tab Authorization, pilih type Bearer Token lalu masukkan token yang didapatkan setelah login berhasil.

*Panduan login ada di artikel; Laravel 8: REST API Authentication dengan Sanctum

Laravel 8 Sanctum Rest API: Create Data

Jika authorization token sudah disetup, sekarang buat POST request ke 127.0.0.1:8000/api/programs, kemudian pada body, tambahkan key name dan desc beserta valuenya.

Jika sudah menambahkan key dan value, lanjutnya dengan klik button Send. Maka hasilnya, jika value yang diinputkan berhasil divalidasi, data tersebut akan ditambahkan ke table programs di database dan akan me-return response seperti gambar di atas.

Fetch All Data

Laravel 8 Sanctum REST API: Fetch all data

Kemudian kita akan coba fetch all data atau menampilkan semua data di table programs. Untuk melakukan pengujian tersebut, buat GET request ke 127.0.0.1:8000/api/programs lalu klik button Send, maka hasil response yang ditampilkan akan seperti gambar di atas.

Get Single Data

Laravel 8 Sanctum REST API: Get Single Data

Di pengujian yang ketiga, kita akan test atau coba get single data atau menampilkan detail data program berdasarkan id. Untuk melakukan pengetesan tersebut, buat GET request ke 127.0.0.1:8000/api/programs/{id}, lalu klik button Send, maka hasil response yang ditampilkan akan seperti gambar di atas atau akan menampilkan detail dari dari id data yang dipilih.

Update Data

Laravel 8 Sanctum REST API: Update Data

Selanjutnya kita akan coba memperbarui data program atau update data berdasarkan id. Buat PUT request ke 127.0.0.1:8000/api/programs/{id}. Kemudian pada tab params, masukkan key dan value atau data yang akan menggantikan data yang ada saat ini (pada id data tersebut). Jika key dan value sudah diisi, lanjutkan dengan klik button Send, maka response yang dihasilkan akan seperti gambar di atas.

Delete Data

Laravel 8 Sanctum REST API: Delete Data

Testing terakhir, kita akan coba untuk menghapus data atau delete data dengan REST API sanctum di laravel 8. Untuk dapat melakukan delete data, buat DELETE request ke 127.0.0.1:8000/api/programs/{id} lalu klik Send, maka hasilnya data dengan id tersebut akan dihapus dari table programs dan akan menampilkan response message seperti gambar di atas.

Kesimpulan

Sampai di akhir artikel ini kita telah sama-sama belajar bagaimana cara membuat REST API CRUD (Create, Read, Update & Delete) menggunakan sanctum package di larave 8. Catatan penting, sebelum membuat atau mengirimkan request, pastikan sudah melakukan setup authorization token dengan menginputkan token yang didapat saat berhasil login.

Semoga artikel ini bisa bermanfaat, selamat mencoba dan sampai jumpa di artikel berikutnya. 👋

Happy Coding 👨‍🚀 👨‍💻 🚀

 

📖 Full Documentation: Laravel Resources

Tinggalkan Komentar
Loading Comments