Modul Praktikum Laravel API Studi Kasus
Modul Praktikum Laravel API Studi Kasus
Membangun Restfull API menggunakan framework Laravel dengan pendekatan studi kasus
DAFTAR ISI
DAFTAR ISI............................................................................................................................... i
i
BAB I
KONSEP API
“Orang yang memahami konsep dari suatu ilmu, berarti sudah memahami setengah dari ilmu
tersebut”
Ketika kita membuat suatu aplikasi atau sistem informasi, ada kalanya kita membutuhkan
suatu fitur tambahan, penyedia data, penyimpanan data, ataupun fitur yang sifatnya khusus.
Hal ini dikarenakan ketidakmampuan kita untuk membuat fitur tersebut bisa karena terlalu
rumit, kekurangan sumber daya, dan sebagainya. Maka cara termudah ialah dengan
menggunakan API yang disediakan oleh orang lain, sehingga kita bisa berfokus
mengembangkan fitur-fitur yang lain.
Sebagai contoh suatu waktu kita membangun sebuah aplikasi toko online yang memiliki
fitur payment atau pembayaran. Untuk membuat fitur payment maka kita harus bekerjasama
dengan suatu bank sebagai metode pembayarannya. Ditambah bagaimana jika pengguna toko
online kita ingin agar metode pembayarannya ditambah, bisa menggunakan aplikasi fintech
(seperti OVO, Gopay, dsb) maka itu akan menyulitkan sekali apabila kita harus bekerjasama
dengan masing-masing perusahaan fintech tersebut. Atas permasalahan tersebut maka kita
dapat menggunakan API payment gateway untuk memudahkan kita dalam menambahkan fitur
pembayaran. Adapun API payment gateway yang digunakan yakni seperti Midtrans, dan lain-
lain.
Dalam pengembangan selanjutnya aplikasi toko online kita ingin dikembangkan dengan
lebih ramah pengguna, yakni dengan mengirimkan notifikasi pesan ke aplikasi chatting (seperti
WhatsApp) apabila barang yang kita masukkan ke dalam wishlist (barang favorit) sedang
mengadakan promo. Maka kita dapat menggunakan API dari WhatsApp ataupun yang sejenis
untuk dapat mengirimkan notifikasi pesan promo tersebut. Berikut merupakan salah satu
contoh peranan API dalam pengembangan suatu aplikasi.
1
1.2. Cara Kerja API
Cara kerja API mirip seperti ketika mengakses suatu situs di internet. Pada gambar
diatas terdapat bagan “Aplikasi Kita” yang mana bisa berupa berbagai platform baik web,
mobile app, desktop app, dan sebagainya. Jika dirunutkan maka tahapan nya seperti berikut:
1. “Aplikasi Kita” mengirim permintaan ke “Aplikasi Penyedia API”. Misalnya pada tahap
ini kita meminta request untuk mengambil data ramalan cuaca untuk esok hari.
2. “Aplikasi Penyedia API” kemudian memproses permintaan tersebut. Apabila data ramalan
cuaca esok hari tersedia maka “Aplikasi Penyedia API” akan mengirimkan response ke
“Aplikasi Kita” berupa data cuaca esok hari. Apabila data ramalan cuaca esok hari tidak
tersedia, maka “Aplikasi Penyedia API” harus tetap mengirimkan response untuk
menginformasikan data ramalan cuaca esok hari tidak tersedia.
2
Request Response
1. Alamat yang dituju (URL) 1. Messages (tidak wajib, tapi dapat
2. HTTP verb (GET, POST, PUT, menjelaskan hasil response yang
DELETE) keluar). Contoh: “Data berhasil
3. Data yang dikirim (POST, PUT) disimpan”
4. Content-Type 2. Data hasil response (baik ada atau
5. Otentikasi & Otorisasi (biasanya tidak)
dalam bentuk token) 3. Status code (200,404,500,401, dsb)
3
Aplikasi Library *
1. Postman 1. cURL
2. Insomnia, 2. Guzzlehttp (PHP)
3. Thunder Client (VS Code 3. Fetch dan Axios (JavaScript)
Extension), dsb. 4. Retrofit dan Volley (Java Android)
5. Requests (Python),
6. Http (Go Lang), dsb
Catatan: untuk pembahasan selanjutnya kita akan sering menggunakan aplikasi postman
sebagai HTTP client.
4
ingin melakukan komunikasi dengan warga negara Spanyol, maka kita cukup menggunakan
bahasa inggris sebagai bahasa untuk berkomunikasinya. Hal ini dikarenakan kita sebagai warga
negara Indonesia dan lawan bicara kita yang berwarga negara Spanyol dapat mengerti apabila
berkomunikasi dengan bahasa inggris.
Untuk dapat berkomunikasi API dapat menggunakan format data berupa XML ataupun
JSON. Namun dalam materi-materi selanjutnya kita hanya akan menggunakan format JSON
sebagai format pertukaran data. JSON memiliki format data berupa key-value yang memiliki
type data tiap value nya.
Jika diibaratkan sebagai tabel di suatu database, maka key adalah perwujudan dari kolom,
sedangkan value adalah isi dari kolom tersebut. Selain itu apabila kita memiliki lebih dari satu
objek, maka kita bisa memasukkannya ke dalam suatu array seperti berikut:
5
Pada bab selanjutnya kita akan mempraktekan bagaimana mengakses API public dengan
menggunakan aplikasi postman, dimana terdapat dua jenis API public yakni yang memiliki
otentikasi dan yang tidak memiliki otentikasi.
6
BAB II
BELAJAR AKSES API DENGAN POSTMAN
1. Browser
2. Postman (https://www.postman.com/product/rest-client/)
Sebagai contoh kita akan mencoba untuk mengakses API dari situs
https://dummyjson.com/ . Situs ini menyediakan data dummy untuk API yang bisa kita pilih.
Pada halaman awal akan disajikan bagian apa saja yang memiliki API Public. Untuk
praktik kali ini bisa kita ambil contoh menggunakan API sebuah “Products” dengan cara klik
tombol “/products”
7
Pada halaman tersebut kita bisa melihat data dengan detil. Selanjutnya mari kita mulai
mempraktekkannya menggunakan postman.
1. Klik “New”
8
2. Kemudian pilih “HTTP Request”
3. Masukkan URL, pilih http verb “GET”, dan klik tombol “Send”
Masukkan alamat
9
Namun ketika kita mengubah URL dengan menambahkan /101, maka hasil menunjukkan
404 not found. Hal ini dikarenakan pihak pembuat API dummyjson tidak menyertakan data
dengan id 101.
10
Kita juga bisa menyimpan hasil dari API yang kita akses dengan ctrl + s, kemudian
simpan pada folder yang kalian inginkan atau membuat folder baru dan bisa merubah nama
projek API kita sesuai keinginan.
11
Ketik nama project
API disini. Contoh :
“Produk Hape”
Mari kita pelajari lebih dalam API dummyjson ini. Pada dokumentasi selanjutnya kita
juga bisa untuk mendapatkan data Produk handphone berdasarkan title. Namun sebelumnya
alangkah baiknya kita membuat sebuah collection terlebih dahulu, agar memudahkan dalam
mengorganisasikan API-API yang kita akses.
12
4. Klik pada “Produk HP2, lalu “add request”
13
5. Lakukan langkah yang sudah dipelajari sebelumnya.
Selanjutnya coba teman-teman cari data berdasarkan kondisi tertentu ,
14
2. Klik “Create an account”
3. Masukkan first name, last name, email, dan password dan centang “I agree to the terms and
conditions”. Kemudian klik tombol “Create Account”
15
4. Apabila berhasil maka akan muncul notifikasi seperti berikut yang mengharuskan kita
untuk mengkonfirmasi akun API ini di email yang kita masukkan di langkah sebelumnya.
5. Buka email yang digunakan untuk registrasi di langkah sebelumnya, kemudian klik “Click
here”. Selanjutnya kita akan dialihkan ke halaman awal API tersebut dan klik “Sign In”
kembali.
16
6. Masukkan email dan password yang telah di registrasi sebelumnya, dan klik tombol “Sign
In”
7. Apabila berhasil masuk maka kita akan dialihkan ke halaman sebelumnya. Namun
perhatikan bagian kanan atas akan berubah dari menu “Sign In” menjadi email yang kita
gunakan. Kemudian klik menu “Apps”
17
8. Klik tombol “+ NEW APP”
18
9. Isi “App Name” dan “Description
10. Pilih “Book API” dengan klik tombol “enable” di sebelah kanan. Kemudian klik tombol
“save”
19
11. Apabila berhasil disimpan maka kita akan mendapatkan token untuk mengakses API
Saat ini kita telah membuat token akses untuk API. Maka kita bisa mengakses API
tersebut sesuai dengan peruntukkannya. New York Times memiliki beberapa API yang bisa
kita gunakan. Tapi karena saat ini kita hanya mengaktifkan API untuk buku best seller saja,
maka kita hanya bisa mengakses API buku best seller saja. Untuk melihat dokumentasi API,
kita bisa mengakses menu “APIs”.
20
13. Klik menu “Book API”
14. Selanjutnya akan muncul dokumentasi dari Book API, mari kita gunakan alamat
/lists/names.json.
Untuk mengakses alamat diatas, kita harus menambahkan token akses kita di belakang
alamatnya.
21
Warna garis Keterangan
Merah Base URL (URL utama dari API)
Biru URL dari API yang kita tuju
Hijau Query parameter (dalam kasus ini sebagai parameter dari token
akses kita)
Hitam Token akses
Silahkan teman-teman untuk eksplorasi API New York Times secara mandiri.
22
BAB III
MEMBUAT API SEDERHANA
“Aku lebih takut kepada orang yang melatih 1 jurus tendangan sebanyak 1000 kali, daripada
kepada orang yang berlatih 1000 jurus tendangan sebanyak 1 kali” -Bruce Lee
1. Browser
2. Postman
3. XAMPP / LAMPP / WAMPP
4. Laravel versi 8
5. Text Editor (Visual Studi Code/Atoms/Notepad++, dsb)
6. Composer
23
2. Klik link “Composer-Setup.exe” dan ikuti instruksi install nya
3. Apabila sudah install maka buka terminal / command prompt (cmd). Kemudian ketik
perintah “composer”
24
4. Selanjutnya tentukan akan ditaruh dimana projek laravel kita, pada gambar dibawah kita
menyimpannya di D:/projects. Kemudian ketikan perintah “composer create-project
laravel/laravel <nama projek kita>” dan klik enter.
Catatan: Untuk menginstall laravel kita harus terkoneksi dengan internet karena akan
mendownload projek laravel beserta dependenci nya dan harus menunggu beberapa saat
sampai selesai. (Laravel versi 8)
25
5. Kita dapat melihat hasil projek di direktori yang telah dipilih pada langkah sebelumnya
6. Kembali ke terminal / command prompt dan arahkan ke folder projek kita. Kemudian
ketikan perintah “php artisan serve” dan tekan enter
26
8. Apabila muncul tampilan dibawah maka projek laravel berhasil di running
27
1. Aktifkan Apache web server dan MySQL di XAMPP
3. Jika sudah buka projek laravel kita di text editor. Dalam praktikum kali ini kita
menggunakan aplikasi Visual Studio Code
28
4. Pilih projek laravel kita sesuai dengan lokasi penyimpanan projek.
29
5. Maka akan muncul isi dari projek kita di Visual Studio Code
6. Selanjutnya kita buka file .env di root projek. Di file .env kita akan melakukan konfigurasi
database yang kita gunakan baik dari hostname, username, nama database, hingga
password database. Kemudian kita save dengan ctrl + s.
Catatan: file .env berisi beberapa konfigurasi yang diperlukan untuk projek laravel. Dalam
kasus ini kita hanya perlu mengubah konfigurasi database saja
30
Selanjutnya mungkin kita akan bertanya-tanya, kapan kita akan membuat skema dari
database yang sudah kita buat. Tidak seperti sebelumnya kita membuat skema database
langsung di phpmyadmin, kali ini kita akan membuat skema database di laravel. Hal ini akan
memudahkan teman satu tim kita atau orang lain ketika ingin melanjutkan projek laravel kita
sehingga tidak harus meng-import database buatan kita sebelumnya ataupun membuat skema
database dari awal.
Untuk membuat skema database kita bisa menggunakan perintah “php artisan
make:migration <nama_skema_database>” di terminal / command prompt kita.
1. Kita buat skema dengan nama create_products_table dengan perintah “php artisan
make:migration create_products_table”.
Dari perintah diatas maka akan menghasilkan file skema di projek laravel kita yang berlokasi
di folder database/migrations
31
2. Kita buat kolom product_name, product_type, product_price, dan expired_at. Tiap kolom
mempunyai type data yang berbeda. Kemudian save dengan ctrl + s.
32
Catatan: type data yang tersedia di laravel migration sangat banyak. Kita dapat mempelajari
lebih lanjut di alamat berikut: https://laravel.com/docs/8.x/migrations#available-column-types
3. Selanjutnya yakni kita migrasikan skema database kita ke database MySQL. Dengan
menggunakan perintah “php artisan migrate” di terminal / command prompt
33
Catatan: ada beberapa hasil migrasi yang tidak kita buat tergenerate, itu karena dalam folder
database/migrations terdapat beberapa file skema.
Pertama-tama yang harus kita lakukan yakni memahami flow/alur dari laravel. Mari kita
lihat pada gambar dibawah.
34
Kita perhatikan anak panah berwarna hijau, anak panah hijau merupakan request yang
mana akan melakukan permintaan dari pengguna ke aplikasi/sistem. Selanjutnya akan
diteruskan dari route - controller – model – database - view, dan akan dikembalikan ke
pengguna sebagai response (anak panah biru). Pada API alur yang terjadi yakni cukup route -
controller – model – database, tidak melibatkan view.
Selanjutnya kita akan memperdalam istilah-istilah diatas pada tabel dibawah ini.
Istilah Keterangan
Route Rute dari aplikasi yang kita miliki, apabila kita melakukan request ke
URL tertentu dan akan menghasilkan response tertentu. Contoh ketika
kita mengakses menu “tentang kami” pada situs perusahaan, maka
browser akan menampilkan halaman “tentang kami”. Apabila alamat
yang dituju tidak tersedia di situs tersebut maka akan muncul halaman
“404 not found”
Controlller Tempat untuk memasukkan logic dari aplikasi kita, pada beberapa
framework sudah menggunakan konsep Object Oriented Programming
(OOP). Pada controller pula kita akan
menghubungkan/mengintegrasikan code seperti library, model, helper,
dsb.
Model Tempat untuk memasukkan logic yang berhubungan dengan database
(representasi dari database). Pada laravel kita bisa menggunakan
Eloquent.
Database Tempat kita untuk menyimpan data, bisa berupa SQL ataupun NoSQL.
Untuk mengakses database di laravel kita bisa menggunakan eloquent
ataupun query builder.
View Tempat kita untuk memasukkan UI atau tampilan dari aplikasi kita, yang
terdiri dari tag html. Pada API kita tidak terlalu membutuhkan view.
3.4.1. Create
Sebelum membuat fungsi menambahkan data atau create, kita akan membuat controller
terlebih dahulu. Dengan laravel kita dapat membuat controller dengan menggunakan perintah
“php artisan make:controller <nama_controller>” di terminal / command prompt (di root
directory projek kita).
35
1. Buat controller dengan nama “ProductController”
Kemudian untuk dapat mengakses database kita perlu model. Model pada laravel dapat
dibuat dengan menggunakan perintah “php artisan make:model <nama_model>” di terminal /
command prompt (di root directory projek kita).
36
Agar controller kita dapat di akses via URL, maka kita harus menambahkannya di
routes/api.php.
Catatan: Pada laravel kita dapat membuat empat jenis route. Namun yang paling umum
digunakan yakni untuk API (api.php) dan website pada umumnya (web.php).
37
Selanjutnya kita akan membuat fungsi untuk menambah data di ProductController.php.
Sesuai dengan nama function di routes/api.php kita akan membuat fungsi bernama “store”.
Namun sebelumnya kita harus mengubah model Product.php menjadi seperti berikut.
Hal ini berguna karena kita akan memberikan izin agar eloquent dapat melakukan insert
terhadap kolom-kolom tersebut.
38
Selanjutnya kita akan mencoba menggunakan postman untuk melakukan input data.
Sebelumnya kita buat sebuah collection di postman agar memudahkan dalam
mengorganisasikan API yang dibuat.
Dalam kasus ini kita akan mencoba menguji API yang kita buat dengan memasukkan
beberapa inputan yang salah.
39
Catatan: Secara default segmentasi url di Laravel untuk web dengan API berbeda. Pada API
kita menambahkannya dengan “/api/”.
Mungkin kita akan kesulitan untuk menentukan jika POST atau PUT kita harus
menggunakan Body yang mana. Untuk lebih memudahkan kita dapat melihat pada tabel
berikut:
40
Maka response yang dihasilkan menjadi seperti berikut.
Info: Error
Status Code : 422 Unprocessable Content (Konten yang dimuat tidak dapat diproses)
Info: Error
Status Code : 422 Unprocessable Content (Konten yang dimuat tidak dapat diproses)
41
Catatan: pada kasus diatas kita memasukkan field baru bernama “brand_name” tapi tidak
menimbulkan error, ini dikarenakan kita tidak memvalidasi field bernama “brand_name”
sehingga hal ini tidak akan ditangani oleh API kita.
4. Kita ubah body JSON kita dengan benar menjadi seperti berikut
Info : Success
Untuk memastikan bahwa inputan berhasil disimpan, mari kita lihat tabel produk di database.
3.4.2. Read
Untuk menampilkan data kita bisa menambahkan beberapa function di
ProductController.php, karena biasanya kita tidak hanya menampilkan data secara
keseluruhan, tapi kita juga bisa menampilkan data secara spesifik maupun data yang memiliki
kemiripan (similar).
42
Sekarang mari membuat 3 function dengan nama “showAll”,”showById”, dan
”showByName” di ProductController.php seperti berikut.
Kita akan berfokus terlebih dahulu untuk menampilkan data produk secara keseluruhan.
43
2. Buat code seperti berikut di dalam function showAll.
Catatan: bagaimana alamat untuk menambah data dan menampilkan data bisa sama tapi tidak
terjadi conflict? Hal ini karena masing-masing url memiliki http verb yang berbeda.
44
Maka response yang dihasilkan menjadi seperti berikut
Untuk lebih memudahkan penjelasan, mari kita tambahkan terlebih dahulu data produk
menggunakan API tambah data produk pada pembahasan sebelumnya.
45
2. Selanjutnya kita pasangkan rute nya di routes/api.php
Catatan: Jika kita perhatikan terdapat tanda {id} di pendefinisian rute, ini dinamakan query
parameter.
3. Akses menggunakan postman
46
Apabila kita ubah id menjadi angka 10 maka akan muncul response berikut
Terakhir kita akan menampilkan data berdasarkan kemiripan nama dari produk di database
47
3. Akses menggunakan postman
Apabila kita menggantinya dengan nama produk yang tidak ada di database maka response
yang dihasilkan seperti berikut
48
3.4.3. Update
Untuk mengubah data produk kita dapat menambahkan satu fungsi di
ProductController.php. Kita akan membuat method dengan nama “update” untuk mengubah
data berdasarkan ID produk.
Catatan: pada update kita dapat menggunakan http verb PUT dan PATCH. PUT berguna untuk
mengubah keseluruhan isi kolom dari satu baris di tabel. Sedangkan PATCH berguna untuk
mengubah satu atau lebih isi kolom dari satu baris di tabel.
Pada kasus kali ini kita menggunakan PUT karena kita tidak memiliki filter kolom tabel
mana saja yang bisa di sunting atau tidak.
49
2. Selanjutnya kita pasangkan rute nya di routes/api.php
Sebelum mencoba di postman, kita tentukan data produk mana yang akan diubah. Misal kita
akan mengubah data produk “Nescafe Original” yang memiliki ID 2.
50
Maka response yang dihasilkan seperti berikut
51
3.4.4. Delete
Untuk menghapus data kita dapat menambahkan satu fungsi dengan nama “delete” di
ProductController.php.
Sebelum mencoba di postman, kita tentukan data produk mana yang akan dihapus. Misal kita
akan mengubah data produk “Vitacimin” yang memiliki ID 3.
52
Maka response yang dihasilkan seperti berikut.
53
3.5. Otentikasi dan Otorisasi API dengan JWT
Ketika membuat API terkadang kita ingin API yang kita miliki tidak bisa diakses oleh
sembarang orang. Seperti halnya form login pada suatu aplikasi, pada API kita juga dapat
menggunakan otentikasi seperti form login. Namun penggunaannya akan berbeda, biasanya
berupa token atau string acak sebagai credential nya.
Pada pembahasan kali ini kita akan menggunakan token JWT sebagai credential token
nya, JWT merupakan singkatan dari JSON Web Token. Tidak seperti session yang terdapat
pada situs umumnya, JWT tidak disimpan di sisi server melainkan disimpan di sisi klien. Jadi
ini memudahkan kita ketika memiliki aplikasi yang sama namun disimpan lebih dari satu server
(untuk kebutuhan ketersediaan sistem).
1. Buka terminal / command prompt dan ketik perintah “composer require firebase/php-jwt”
dan tekan Enter di root directory project kita
54
3. Sebelumnya kita buat seeder untuk tabel users. Seeder merupakan salah satu cara untuk
memasukkan data dummy ke dalam tabel dengan laravel. Buat seeder dengan nama
“UserSeeder” dengan perintah “php artisan make:seeder <nama_seeder>”
55
4. Buka file UserSeeder.php dan buat kode seperti berikut
5. Kemudian buka terminal / command prompt dan ketik perintah “php artisan db:seed –
class=UserSeeder”
Kita akan memisahkan controller untuk data produk dan data pengguna.
56
6. Buat controller dengan nama UserController di terminal / command prompt dan buat
function dengan nama “login”.
57
8. Buat rute login di routes/api.php
Kita bisa melihat hasil decode dari token di https://jwt.io , kita copy token kita dan paste kan
di form seperti berikut.
58
Mungkin akan muncul pertanyaan, apakah ini aman karena kita bisa melihat isi dari token
tersebut. Selama secret key tidak diketahui oleh orang lain maka token ini aman. Hanya saja
tinggal bagaimana kita mengisi payload (isian) dari token tersebut.
59
3.5.2. Otorisasi Token JWT
Selain berfungsi sebagai otentikasi, JWT juga berperan dalam otorisasi sistem atau
aplikasi. Misal ketika kita memiliki token sebagai admin, maka kita hanya bisa mengakses API
untuk admin saja. Sedangkan ketika kita memiliki token sebagai pengguna, maka hanya bisa
mengakses API untuk pengguna saja.
Untuk mencoba membuat otorisasi di laravel, kita harus mengenal terlebih dahulu apa
itu middleware. Middleware secara sederhana merupakan software layer yang berada di antara
router dengan controller, yang berfungsi untuk menyaring request dari pengguna sebelum ke
controller. Dalam kasus ini fungsi middleware yakni untuk memberi otorisasi untuk setiap
token yang di request pengguna.
Di laravel kita dapat membuat middleware dengan mengetikkan perintah “php artisan
make:middleware <nama_middleware>” pada terminal / command prompt. Dalam kasus ini
kita akan membuat middleware dengan nama “AuthMiddleware”.
60
2. Masukkan code berikut di AuthMiddleware.php
3. Selanjutnya kita registrasikan middleware ke Kernel.php dan beri nama ‘jwt-auth’ seperti
pada baris 66.
61
4. Selanjutnya kita grouping route API dari data produk ke dalam middleware “jwt-auth”
Setelah kita grouping route API data produk, maka ketika kita ingin mengakses data
produk kita diharuskan untuk memiliki token JWT terlebih dahulu. Apabila tidak maka request
kita akan tertolak dan mendapatkan response message “Akses ditolak, token tidak memenuhi”.
Ketika kita mendapatkan token JWT, kita harus memasukkannya kedalam header
“Authorization”.
Sebelumnya kita harus menguji terlebih dahulu, ketika kita mengakses API produk tanpa
token JWT. Mari kita menguji dengan menampilkan data produk keseluruhan.
62
Seperti yang terlihat, kita tidak bisa mengakses API untuk menampilkan data produk
secara keseluruhan. Selanjutnya kita akan coba login terlebih dahulu untuk mendapatkan token
JWT
Kita salin token tersebut dan memasukkan nya ke dalam header dengan key “Authorization”
di API data produk keseluruhan dan klik tombol send.
63
Maka response yang dihasilkan seperti berikut
Silahkan teman-teman untuk mencoba akses API produk yang lain menggunakan token JWT.
64
BAB IV
MEMBUAT APLIKASI MENU MASAKAN (API BACKEND)
Pada bab ini kita akan mencoba membuat API dengan studi kasus menu masakan dengan
mengikuti skema database seperti berikut:
laravel/laravel:^8.0 belajar-rest-api.
4.2. Konfigurasi
Selanjutnya kita lakukan konfigurasi database, bahasa yang digunakan, zona waktu dan
tanggal, serta bahasa yang digunakan untuk melakukan seeding database. Hal ini akan
memudahkan pengguna untuk memahami API yang kita buat sehingga meningkatkan user
experience (UX) dari sisi frontend, mencegah perbedaan zona waktu server dengan pengguna
serta memudahkan anggota tim lain saat mencoba API kita saat proses development.
65
4.2.1. Konfigurasi Database
1. Buat database “belajar-rest-api” di localhost/phpmyadmin
2. Selanjutnya kita buka file .env di root projek. Di file .env kita akan melakukan konfigurasi
database yang kita gunakan baik dari hostname, username, nama database, hingga
password database.
66
4.2.2. Konfigurasi Bahasa
Pada API kali ini kita akan menggunakan bahasa Indonesia sebagai bahasa dari aplikasi
yang dibuat. Untuk menggunakannya kita harus menginstall library laravel-lang, ikuti tahap
berikut:
Catatan: sesuaikan dengan versi PHP yang terpasang di komputer kita, pada kasus ini
PHP yang terpasang yakni versi 7.0. Untuk memeriksa kompatibilitas dari library ini
bisa dilihat pada link berikut https://publisher.laravel-
lang.com/installation/compatibility.html
3. Setelah itu jalankan perintah php artisan lang:add id .Perintah ini akan menginstalasi
bahasa Indonesia (id) untuk beberapa fitur yang menggunakan bahasa di Laravel seperti
validasi form, paginasi, pesan otentikasi dan sebagainya.
67
4. Terakhir pada file config/app.php ubah isi locale menjadi id
68
4.1. Skema Tabel Dengan Laravel Migration
4.1.1. Skema Tabel User
1. Kita buat skema dengan nama create_user_table dengan perintah “php artisan
make:migration create_user_table”. Dari perintah diatas maka akan menghasilkan file
skema di projek laravel kita yang berlokasi di folder database/migrations
Catatan: secara default skema migrasi user sudah dibuat oleh laravel pada saat proses
instalasi sehingga kita bisa langsung mengubah isi dari skema user seperti pada gambar
dibawah ini.
69
4.1.2. Skema Tabel Resep
Kita buat skema dengan nama create_resep_table dengan perintah “php artisan make:migration
create_resep_table”. Kemudian ubah menjadi seperti berikut ini.
70
4.1.4. Skema Tabel Bahan
Kita buat skema dengan nama create_bahan_table dengan perintah “php artisan
make:migration create_bahan_table”. Kemudian ubah menjadi seperti berikut ini.
71
4.1.6. Skema Tabel Rating
Kita buat skema dengan nama create_rating_table dengan perintah “php artisan
make:migration create_rating_table”. Kemudian ubah menjadi seperti berikut ini.
72
Catatan: type data yang tersedia di laravel migration sangat banyak. Kita dapat mempelajari
lebih lanjut di alamat berikut: https://laravel.com/docs/8.x/migrations#available-column-types
4. Selanjutnya yakni kita migrasikan skema database kita ke database MySQL. Dengan
menggunakan perintah “php artisan migrate” di terminal / command prompt
73
Untuk memastikan skema sudah di migrasi, kita bisa memeriksanya di phpmyadmin
Catatan: ada beberapa hasil migrasi yang tidak kita buat tergenerate, itu karena dalam folder
database/migrations terdapat beberapa file skema.
74
4.2. Laravel Seeder dan Laravel Factories : Data Dummy
Selanjutnya kita akan membuat data dummy (data palsu untuk kebutuhan development)
pada tabel user dengan menggunakan Laravel Seeder dan Laravel Factories. Namun
sebelumnya kita buat terlebih dahulu model dari tabel user dengan perintah php artisan
make:model User untuk menghubungkan data seeder agar dapat disimpan ke tabel user di
database. Kemudian kita ubah bagian fillable pada user model menjadi berikut (disesuaikan
dengan kolom di tabel) dan tambahkan variabel table seperti dibawah ini.
Pada variabel fillable kita tidak memasukkan kolom created_at dan updated_at, hal ini
dikarenakan 2 kolom tersebut akan otomatis terisi apabila kita melakukan tambah data atau
sunting data.
Catatan: secara default model user sudah dibuat ketika kita instalasi laravel, sehingga kita tidak
perlu buat model user setelahnya
75
1. Setelah berhasil generate, silahkan ubah UserSeeder menjadi seperti berikut
76
3. Setelah itu masukkan perintah php artisan db:seed di terminal/command prompt
projek kita dan pastikan sudah masuk data admin ke tabel user
1. Karena akan digunakan untuk mengisi tabel user maka kita buat perintahnya menjadi php
artisan make:factory UserFactory --model=User. Maka akan menghasilkan file
UserFactory.php di folder database/factory.
Catatan: secara default UserFactory.php sudah dibuat ketika kita instalasi laravel
77
Untuk dokumentasi tipe-tipe factory yang bisa digunakan dapat dilihat pada link berikut:
https://fakerphp.github.io/formatters/. Kita juga dapat menghubungkan Laravel Factories ke
Laravel Seeder.
3. Tambahkan code berikut di UserSeeder dan jalankan perintah php artisan db:seed
4. Jika muncul error maka kosongkan tabel user dan jalankan perintah diatas kembali. Jika
sukses maka akan ter-generate user sebanyak 50 data.
78
4.3. Membuat API Daftar Akun (Guest)
Dalam API Menu Masakan terdapat fitur untuk melakukan registrasi atau pendaftaran
akun, fitur ini berguna apabila pengguna ingin publish resep masakan. Pada fitur ini kita akan
melakukan pengisian informasi akun seperti nama, email, password. Apabila sukses maka
pengguna dapat membuat resep masakan. Ikuti langkah-langkah berikut:
1. Buka terminal / command prompt dan ketik perintah “composer require firebase/php-jwt”
dan tekan Enter di root directory project kita
79
2. Buat variabel di file .env dengan nama “JWT_SECRET_KEY=<teks_acak>” di root
directory.
80
4. Selanjutnya kita akan menambahkan baris kode di app\Models\User.php untuk membuat
password otomatis di lakukan hash
5. Setelah itu kita akan buat observer untuk menjalankan suatu tugas ketika pengguna
berhasil registrasi akun, yakni menambahkan kapan pengguna terakhir kali melakukan
login (pada kolom last_login tabel user). Masukkan perintah php artisan
81
make:observer <nama_observer> --model=<nama_model>. Pada kasus ini maka php
artisan make:observer UserObserver --model=UserObserver
82
8. Pada observer kita juga dapat melakukan logging. Logging merupakan suatu sistem untuk
membuat history/riwayat pengguna dalam mengakses suatu sistem. Untuk membuatnya
kita siapkan terlebih dahulu model log dengan memasukkan perintah php artisan
make:model Log. Kemudian buka dan ubah isinya menjadi seperti berikut:
83
10. Terakhir kita buat route untuk mengakses API registrasi akun di routes/api.php
11. Selanjutnya kita akan test API registrasi menggunakan postman, sebelumnya kita buat
terlebih dahulu collection agar testing API lebih rapi dan terstruktur
12. Pada test API terlihat bahwa pesan kesalahan terlihat sangat rumit untuk dikenali, kita akan
mengubahnya ke format yang lebih mudah dibaca (readable). Kita buat sebuah helper
untuk memudahkan format pesan kesalahan dengan membuat secara manual di dalam
folder app\Helpers\MessageError.php dan dapat digunakan oleh seluruh fitur.
84
14. Selanjutnya tambahkan kode berikut di composer.json (root projek) dan isi di dalam
autoload
15. Setelah itu kita masukkan perintah composer dump-autoload di terminal/cmd root projek
kita
85
16. Terakhir ubah kode untuk validasi error inputan seperti berikut dan coba jalankan postman
kembali
86
Berikut hasil apabila inputan sesuai dengan aturan dari registrasi
87
1. Pada AuthController kita tambahkan function login dan isinya yakni sebagai berikut
88
2. Terakhir akan test API login menggunakan postman
89
4.5. Membuat API Modul Admin
4.5.1. User Management
A. Tambah Akun Via Admin
Pada pembahasan ini kita akan membuat fitur untuk melakukan registrasi akun melalui
admin, sebelum membuat controller kita akan membuat terlebih dahulu grouping route di
routes/api.php. Pada grouping route ini terdapat 3 group berdasarkan role/hak akses API:
admin, user, dan guest. Untuk mengakses fitur-fitur admin kita harus memiliki token admin.
90
3. Setelah itu kita buat middleware dengan memasukkan perintah php artisan
91
4. Selanjutnya kita daftarkan middleware yang sudah kita buat di app\Http\Kernel.php dan
masukkan potongan baris kode berikut ke dalam $routeMiddleware
5. Selanjutnya kita coba test API, namun sebelumnya kita harus login terlebih dahulu sebagai
admin dan kita salin token berikut (salin token hanya dari teks “Bearer”)
92
6. Terakhir kita masukkan token tersebut ke dalam tab Authorization pada endpoint API kita
pilih tipe token “Bearer Token”dan tempelkan token kita di form token
93
94
B. Lihat Semua Akun
Pada pembahasan ini kita akan membuat semua fitur untuk melihat semua akun dengan
role user.
3. Lalu test API dengan memasukan url seperti berikut, dan pastikan tokennya juga diisi
95
C. Lihat Detail Akun
Pada pembahasan ini kita akan membuat fitur untuk melihat detail akun. Melihat detail
akun menggunakan parameter id sebagai kunci nya.
96
2. Tambah kode berikut di AdminController.php
3. Lalu test API dengan memasukan url seperti berikut, dan pastikan tokennya juga diisi
97
D. Update Akun
Pada pembahasan ini kita akan membuat fitur untuk update akun. Update akun
menggunakan parameter id sebagai kunci nya.
98
2. Tambah kode berikut di AdminController.php
99
3. Kemudian ubah kode berikut pada app\Observers\UserObserver.php
4. Lalu test API dengan memasukan url seperti berikut, dan pastikan token diisi
100
101
E. Hapus Akun
Pada pembahasan ini kita akan membuat fitur untuk hapus akun. Hapus akun
menggunakan parameter id sebagai kunci nya.
102
3. Kemudian tambah kode berikut pada app\Observers\UserObserver.php
4. Lalu test API dengan memasukan url seperti berikut dan isi sesuai id yang akan dihapus,
serta pastikan token diisi
103
F. Aktivasi Akun
Pada pembahasan ini kita akan membuat fitur untuk aktivasi akun. Aktivasi akun
menggunakan parameter id sebagai kunci nya.
104
2. Tambah kode berikut di AdminController.php
3. Lalu test API dengan memasukan url seperti berikut dan isi sesuai id yang akan di aktivasi,
serta pastikan token diisi
105
106
4.5.2. Resep
Pada pembahasan kali ini kita akan membuat fitur untuk admin dapat mengelola data
resep seperti menambah resep, melihat resep, menghapus resep, menyunting resep, dan publish
resep.
A. Menambah Resep
1. Tambah routes/api.php menjadi seperti berikut:
2. Kita persiapkan 3 model untuk membuat resep secara keseluruhan yakni model Recipe,
Tool, Ingredient
107
4. Buat app\Http\Models\Tool.php menjadi seperti berikut
Tambahkan
108