Basic CRUD API on Laravel 8
By: Teddy Koerniadi
Tags: Laravel Framework, Crud, API, Laravel, Eloquent

Dalam dunia software development mungkin sudah tidak asing lagi di telinga kalian sebuah istilah yang satu ini yaitu API atau Application Programming Interface. Kali ini kita akan coba membuat API Create, Read, Update, dan Delete di salah satu framework php yaitu Laravel. Yang perlu kita siapkan adalah:

Php

Composer (dependency manager for php)

Web server

Text editor

Postman untuk testing

Oke kita langsung coding

Buat project baru dengan laravel, silahkan ke halaman https://laravel.com/docs/8.x/installation untuk cara membuat project. Buat routing api. Semua routing di laravel ada di folder project kita lalu ada folder namanya routes. Di laravel ada beberapa routing biasanya kalau aplikasi biasa itu kita taruh routing di web.php, karena kita akan buat api maka buka file api.php. Lalu coba lihat code dibawah:

...

use App\\Http\\Controllers\\ProductController; Route::get('/products', [ProductController::class, 'index']);

Route::post('/products', [ProductController::class, 'store']);

Route::get('/products/{id}', [ProductController::class, 'show']);

Route::patch('/products/{id}', [ProductController::class, 'update']);

Route::delete('/products/{id}', [ProductController::class, 'destroy']); ...

Code di atas adalah contoh dasar routing api pada 1 modul, disini kita coba buat module product. ada 5 route:

/products bertipe get, di pakai untuk menampilkan data dari product

/products bertipe post, di pakai untuk menambahkan data product baru

/products/{id} bertipe get, di pakai untuk menampilkan hanya product yang memiliki id yang di sematkan atau disebutkan di urlnya

/products/{id} bertipe patch atau bisa juga put, di pakai untuk mengubah data product dengan id yang telah di sematkan atau disebutkan di urlnya

/products/{id} bertipe delete, di pakai untuk untuk menghapus data product dengan id yang telah di sematkan atau disebutkan di urlnya

disebelahnya di dalam kurung siku adalah controller dan function yang akan di jalankan ketika routenya terpanggil.

3. Buat modul (model, controller, migration), disini kita buat memakai perintah di terminal ya, coba jalankan di terminal dan pastikan posisinya di folder project kalian.

php artisan make:model Product -a

perintah di atas akan mengenerate model, factory, migration, seeder, dan controller. Karena diakhir perintahnya kita tambahkan -a yang artinya all jadi ter-generate-lah semuanya tadi dalam satu perintah. Ini akan membantu kita dalam naming modul nya karena seperti di dalam migrationnya sudah tergenerate nama table ‘products’, model sudah menggunakan table ‘products’, dan controller sudah menggunakan model ‘Product’. EMEIZING-kan!!!

4. Silahkan edit product migration sesuai dengan kebutuhan kita. karenakita disini coba-coba. Jadi kita akan tambahkan saja kolom name, price, dan stock. lalu jalankan di terminal “php artisan migrate”

..... public function up()

{

Schema::create('products', function (Blueprint $table) {

$table->id();

$table->string("name");

$table->integer("price");

$table->integer("stock");

$table->timestamps();

});

} .....

5. Edit app/models/Product.php, tambahkan variable fillable yang diisi dengan semua nama kolom yang kita ingin bisa masukan datanya lewat aplikasi kita, contoh code lihat di bawah.

..... class Product extends Model

{

use HasFactory;



/**

* The attributes that are mass assignable.

*

* @var array

*/

protected $fillable = [

'name',

'price',

'stock'

];

}

6. Edit app/Http/Controllers/ProductController.php. Ketika kita buka ProductController pasti sudah ada template function yang sudah dibuat. kita hanya akan edit function index, show, store, update, dan delete. Karena dasarnya function itu yang sering dipakai untuk api. Lihat code di bawah.

..... class ProductController extends Controller

{

/**

* Display a listing of the resource.

*

* @return \\Illuminate\\Http\\Response

*/

public function index()

{

return Product::all();

} /**

* Show the form for creating a new resource.

*

* @return \\Illuminate\\Http\\Response

*/

public function create()

{

//

} /**

* Store a newly created resource in storage.

*

* @param \\Illuminate\\Http\\Request $request

* @return \\Illuminate\\Http\\Response

*/

public function store(Request $request)

{

return Product::create([

'name' => $request->name,

'price' => $request->price,

'stock' => $request->stock,

]);

} /**

* Display the specified resource.

*

* @param \\App\\Models\\Product $product

* @return \\Illuminate\\Http\\Response

*/

public function show($id)

{

return Product::find($id);

} /**

* Show the form for editing the specified resource.

*

* @param \\App\\Models\\Product $product

* @return \\Illuminate\\Http\\Response

*/

public function edit($id)

{

return Product::find($id);

} /**

* Update the specified resource in storage.

*

* @param \\Illuminate\\Http\\Request $request

* @param \\App\\Models\\Product $product

* @return \\Illuminate\\Http\\Response

*/

public function update(Request $request, $id)

{

return Product::where('id', $id)

->update([

'name' => $request->name,

'price' => $request->price,

'stock' => $request->stock,

]);

} /**

* Remove the specified resource from storage.

*

* @param \\App\\Models\\Product $product

* @return \\Illuminate\\Http\\Response

*/

public function destroy($id)

{

return Product::destroy($id);

}

}

untuk function lainnya dibiarkan saja atau juga boleh di hapus karena kita tidak pakai.

Oke sekarang sudah selesai kita coba di postman hit ke 5 endpointnya. Jangan lupa jalankan dulu servernya ya, jalankan di terminal “php artisan serve”, jika server berjalan dengan lancar. READY FOR TESTING

Create, disini kita buat 2 data agar terlihat perbedaan ketika kita hit endpoint read all dan read one.

API Create Test 1

API Create Test 2

Read All

API Read All Test

Read One

API Read One Test

Update

API Update Test

Delete

API Delete Test

Ketika semua test case telah berhasil, maka percobaan api kita berhasil.

Sekia Basic CRUD API on Laravel 8, terima kasih semoga bermanfaat.