Membuat RESTful API + upload fiile dengan Laravel

Zul Fahmi
7 min readJun 9, 2021

--

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

category migration
VS Code, Theme: Omni, Font: Fira Code Iscript

Product migraition

Product migraition

Category Seeder

Insert batch

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

Product Model

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

Menggunakan response status name

Pastikan kamu mengimport model product dan Response(optional)

Taruh sebelum nama class

atau kamu bisa langsung menuliskan response status codenya misalnya 200. Untuk response status lain bisa kamu liat disini .

Menggunakan response status code

Sekarang mari kita test endpoint yang sudah dibuat dengan postman/aplikasi untuk testing API lainnya.

Jangan lupa php artisan serve

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
Product Collection

Pada public static $wrap = ‘products’; itu optional, kamu bisa mengubahnya sesukamu atau tanpa memakainya pun tidak apa.

Kemudian ProductController method index

Ubah menjadi seperti ini

Test lagi di postman

Tanpa resource api

Dengan API Resource(collection)

Tampak lebih rapi bukan?

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
Kamu bisa menyesuaikan validasi sesukamu.

ProductController

Untuk testing validasi kita buat seperti ini terlebih dahulu.

jika semua field sesuai maka di postman akan tampil

Kita tambahkan header baru postman

Dan send

message validasi error

Validasi error tampil karna kita belum menginput name dan value sama sekali, lalu bagaimana cara menginputnya?

untuk validasi nullable kamu tidak wajib mengisinya

Klik body dan pilih form-data

Untuk photo ubah menjadi file agar bisa upload

ubah text jadi file

Lihat validasi berhasil tapi data tersebut belum masuk ke database. Untuk itu kembali pada productController@store

Method 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
ProductResource
ProductResource

Kamu bisa memodifikasi response yang akan ditampilkan nantinya.

Kembali pada postman lagi dan send

Response yang dihasilkan

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

pilih salah satu cara

Saya membuat 2 cara disini, kamu bisa mencobanya satu persatu dan lihat sendiri perbedaannya.

Duplicate enpoint index dan tambahkan parameter id{angka}

5.4 Method Update

Nahh, klo yang ini hampir sama seperti method store

Kita buat request validasinya lagi

Php artisan make:request UpdateProductRequest
Jangan lupa ubah authorizenya menjadi true seperti sebelumnya.

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

gampang kan?

Selain hapus data pada database kamu juga harus hapus file photo yang ada pada storage.

Dan seperti biasa kembali ke postman dan send.

Ubah methodnya jadi DELETE.

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.

--

--