Halo temen-temen ini adalah tulisan pertama yang saya publish pada Medium
Klo kamu mencari Arikel ini seharusnya kali sudah tau apa itu RESTful API dan tentu saja laravel itu sendiri, jadi ayo kita langsung mulai aja membuat RESTful API + upload file menggunakan Laravel. Pada saat saya menulis artikel ini versi terbaru laravel adalah 8.5.19
1.Setup Laravel
Install via composer
composer create-project laravel/laravel Laravel-API
Laravel Installer
laravel new Laravel-API
Pindah ke directory project
cd Laravel-API
Buat database dan sesuaikan nama database tersebut pada .env file
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_api
DB_USERNAME=root
DB_PASSWORD=
2. Migration
Pada database nanti akan ada 2 tabel diantaranya categories dan products yang saling berelasi categories to products -> HasMany, kemudian untuk products to categories -> BelongsTo, yang mana pastinya kita akan menggunakan salah satu “magic” laravel yaitu Eloquent.
php artisan make:model Category –msphp artisan make:model Product –m
command diatas akan langsung membuatkan kita model, migration, dan seeder(optional)
*Tips: pastikan file kamu huruf pertamanya besar, jika kamu menggunakan linux pasti akan error karna Case Sensitive.
Laravel memiliki “aturan“ yaitu nama table dan migration harus plural, model dan controller harus singular, dan jika relasi hasMany maka juga harus plural.
Category migration
Product migraition
Category Seeder
Kenapa membuat seeder hanya untuk category? Karna kita hanya akan berfokus pada product yang dimana nantinya kita akan melakukan CRUD menggunakan API, untuk category kamu bisa membuatnya sendiri setelah selesai membaca artikel ini.
Run migration dan seeder
Php artisan migrate –seed
3.Model
Mari kita buat relasi antar table
Category
Product
Kamu bisa menggunakan $fillable atau $guarded, tapi menurut saya jika website yang akan kamu buat hanya digunakan secara pribadi menggunakan $guarded itu oke-oke saja, tapi jika sebaliknya maka kamu harus menggunakan $fillable karna dengan $fillable kita hanya bisa menginsert field yang didefinisikan saja, bayangkan jika kamu menggunakan $guarded dan ada user “iseng” yang berusaha ingin menginsert field yang seharusnya sudah kamu set secara default.
Misalnya jika pada user table kamu terdapat field “is_admin” secara default user yang baru daftar memiliki field “Is_admin” = 0 atau false tapi membuat input baru dengan name sama “is_admin” dan value 1 atau true maka user tersebut akan menjadi Admin dan dia bisa mengacak-acak website kita.
4. Route
Pada folder app\routes\api.php
Tapi karna kita tidak membutuhkan method create dan edit kamu bisa membuatnya seperti ini
Atau
Atau
5.Controller
Buat controller untuk product
php artisan make:controller ProductController –api
hampir sama seperti –resource tetapi tanpa ada method create, dan edit.
5.1 Method index
Pastikan kamu mengimport model product dan Response(optional)
atau kamu bisa langsung menuliskan response status codenya misalnya 200. Untuk response status lain bisa kamu liat disini .
Sekarang mari kita test endpoint yang sudah dibuat dengan postman/aplikasi untuk testing API lainnya.
Hasilnya:
Jika product tidak tampil itu artinya data pada table masih kosong kamu bisa menggunakan Artisan Tinker untuk menginsert data secara manual seperti dibawah ini atau insert langsung pada database.
Artisan Tinker
Lalu test send pada postman lagi.
Jika kamu kurang suka dengan response json nya, jadi mari kita coba ubah dengan API Resource .
php artisan make:resource ProductCollection
Pada public static $wrap = ‘products’; itu optional, kamu bisa mengubahnya sesukamu atau tanpa memakainya pun tidak apa.
Kemudian ProductController method index
Test lagi di postman
Tanpa resource api
Dengan API Resource(collection)
5.2 Method Store
Menampilkan semua data product sudah berhasil sekarang mari kita buat endpoint untuk insert data serta upload file untuk photo product, Tapi buat validasinya dulu.
Php artisan make:request StoreProductRequest
ProductController
Untuk testing validasi kita buat seperti ini terlebih dahulu.
Kita tambahkan header baru postman
Dan send
Validasi error tampil karna kita belum menginput name dan value sama sekali, lalu bagaimana cara menginputnya?
Klik body dan pilih form-data
Untuk photo ubah menjadi file agar bisa upload
Lihat validasi berhasil tapi data tersebut belum masuk ke database. Untuk itu kembali pada productController@store
Buat API Resource lagi, sebelumnya kita sudah membuat API Resource hanya saja itu bersifat collection jika kita ingin hanya menampilkan satu data dan memodifikasinya dengan bebas maka mari kita gunakan API Resource(model)
Php artisan make:resource ProductResource
Kamu bisa memodifikasi response yang akan ditampilkan nantinya.
Kembali pada postman lagi dan send
Data berhasil disimpan, untuk memastikan kamu bisa cek pada endpoint index yang sudah kita buat sebelumnya dan untuk photo kamu bisa cek pada folder storage/app/img/photo.
Sebenarnya pada method index kamu bisa ubah querynya tanpa menggunakan with menjadi seperti ini
Karna pada ProductResource kita sudah menbuatnya
Dan jika kamu lihat pada endpoint index, responsenya pun sudah berubah juga.
5.3 Method Show
Menampilkan secara spesifik data berdasarkan id
Hampir sama seperti method index hanya saja kita memerlukan parameter
Saya membuat 2 cara disini, kamu bisa mencobanya satu persatu dan lihat sendiri perbedaannya.
5.4 Method Update
Nahh, klo yang ini hampir sama seperti method store
Kita buat request validasinya lagi
Php artisan make:request UpdateProductRequest
Kembali ke controller
Kembali ke postman, kamu bisa duplicate dari store endpoint lalu ubah methodnya jadi PUT/PATCH
Walaupun kamu sudah mengisi semua field tapi malah muncul validasi error??
Kita gunakan raw JSON tapi sebelum itu kamu harus unceklis Content-Type pada Header
Lalu send lagi, Seharusnya berhasil. Tapi bagaimana jika ingin mengubah photo dengan upload file baru?
Awalnya saya juga kebinggungan, tapi setelah saya pergi ke stackoverflow saya langsung menemukan jawabannya. Terima kasih stackoverflow 🗿.
Kamu bisa baca disini.
Ceklis kembali Content-Type pada Header dan ubah method requestnya menjadi POST dan kembali pada Body lalu send.
5.5 Method Destroy
Klo ini mah gampang banget buatnya
Selain hapus data pada database kamu juga harus hapus file photo yang ada pada storage.
Dan seperti biasa kembali ke postman dan send.
RESTful API yang kita buat masih sangat sederhana. jika kamu ingin ada Authentikasi pada API yang sudah dibuat, kamu bisa gunakan laravel sanctum atau laravel pasport.
Mungkin akan saya buatkan lanjutan artikelnya nanti.
Jika ingin melihat source code nya langsung serta file postman kamu bisa kunjungi reponya disini.
Kamu sudah sampai dipenghujung artikel nih, semoga bisa membantu, terima kasih sudah membaca sampai selesai dan maaf bila ada kata-kata yang kurang berkenan.