Pengembangan REST API Sederhana dengan Laravel
Persyaratan Awal:
Sebelum menginstal Laravel, pastikan komputer kita telah memenuhi persyaratan berikut:
- PHP versi 8.0 atau yang lebih baru
- Composer, manajer dependensi PHP
- Node.js dan npm (Opsional, terutama untuk fitur frontend)
Langkah 1: Instalasi Laravel menggunakan Composer
Buka terminal atau command prompt dan jalankan perintah berikut untuk membuat proyek Laravel baru:
composer create-project laravel/laravel nama-proyek
nama-proyek
dapat diganti dengan nama yang Kita inginkan untuk proyek Kita. Perintah ini akan mengunduh dan menginstal semua dependensi yang diperlukan untuk proyek Laravel.
Langkah 2: Menjalankan Server Lokal
Setelah selesai, masuk ke direktori proyek Laravel yang baru saja dibuat:
cd nama-proyek
Kemudian, jalankan server lokal menggunakan perintah Artisan:
php artisan serve
Ini akan menjalankan server lokal di http://localhost:8000
. Buka browser dan arahkan ke URL tersebut untuk melihat halaman selamat datang Laravel.
Langkah 3: Konfigurasi File .env
Salin file .env.example
ke file baru bernama .env
:
cp .env.example .env
Pengaturan file .env
di Laravel untuk mengkonfigurasi koneksi ke database MySQL:
DB_CONNECTION=mysql
DB_HOST=nama_host_database
DB_PORT=port_database
DB_DATABASE=nama_database
DB_USERNAME=username_database
DB_PASSWORD=password_database
Penjelasan mengenai setiap variabel di dalam file .env
:
DB_CONNECTION
: Menentukan driver database yang digunakan, dalam contoh di atas adalah MySQL.DB_HOST
: Nama host dari server database, bisa berupalocalhost
, alamat IP, atau hostname dari server MySQL.DB_PORT
: Port yang digunakan oleh MySQL, port default MySQL adalah 3306.DB_DATABASE
: Nama database yang ingin digunakan.DB_USERNAME
: Username dari database yang memiliki akses terhadap database yang dipilih.DB_PASSWORD
: Password untuk username database yang telah disebutkan sebelumnya.
Pastikan untuk menyimpan konfigurasi yang sesuai dengan pengaturan database Kita pada bagian .env
agar aplikasi Laravel dapat terhubung ke database MySQL dengan benar.
Langkah 4: Migrasi Database
Jika sudah mengatur database pada file .env
, jalankan migrasi untuk membuat tabel-tabel default:
php artisan migrate
Ini akan membuat tabel-tabel default yang digunakan oleh Laravel, seperti tabel pengguna (users).
Langkah-langkah Pembuatan Migration dengan Artisan
-
Gunakan Command Artisan
- Buka terminal atau command prompt, kemudian ketik perintah berikut:
php artisan make:migration create_products_table
Perintah di atas akan membuat sebuah file migrasi baru di dalam direktori
database/migrations
dengan nama yang mengikuti pola penamaan tertentu, dalam contoh ini adalahcreate_products_table
. -
Definisikan Struktur Tabel dalam File Migrasi
- Buka file migrasi yang baru dibuat di dalam direktori
database/migrations
. Di dalam file migrasi, Kita akan menemukan dua method yaituup()
dandown()
. Fokuskan pada methodup()
untuk menentukan struktur tabel yang ingin Kita buat.
Berikut adalah contoh definisi struktur tabel
products
dalam methodup()
:use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateProductsTable extends Migration { public function up() { Schema::create('products', function (Blueprint $table) { $table->id(); $table->string('name'); $table->text('description'); $table->decimal('price', 8, 2); $table->timestamps(); }); } public function down() { Schema::dropIfExists('products'); } }
Di dalam method
up()
, terdapatSchema::create()
yang digunakan untuk membuat tabelproducts
dengan kolom-kolom yang telah didefinisikan sepertiid
,name
,description
,price
, dantimestamps
(created_at dan updated_at). - Buka file migrasi yang baru dibuat di dalam direktori
-
Jalankan Migrasi
- Setelah definisi struktur tabel selesai, Kita dapat menjalankan migrasi menggunakan command Artisan berikut:
php artisan migrate
Perintah di atas akan menjalankan semua migrasi yang belum pernah dijalankan sebelumnya dan membuat tabel
products
sesuai dengan definisi yang telah Kita buat di dalam file migrasi.
Langkah-langkah Pembuatan Seeder dengan Artisan
-
Gunakan Command Artisan
- Buka terminal atau command prompt, kemudian ketik perintah berikut:
php artisan make:seeder ProductsTableSeeder
Perintah di atas akan membuat sebuah file seeder baru di dalam direktori
database/seeders
dengan namaProductsTableSeeder
. -
Isi Seeder dengan Data Dummy
- Buka file seeder yang baru dibuat di dalam direktori
database/seeders
. Di dalam file seeder, Kita akan menemukan methodrun()
yang akan dieksekusi ketika seeder dijalankan.
Contoh pengisian seeder dengan data dummy untuk tabel
products
:<?php namespace Database\Seeders; use Illuminate\Database\Seeder; use App\Models\Product; class ProductsTableSeeder extends Seeder { public function run() { Product::create([ 'name' => 'Product A', 'description' => 'Description for Product A', 'price' => 19.99, ]); Product::create([ 'name' => 'Product B', 'description' => 'Description for Product B', 'price' => 29.99, ]); // Tambahkan data dummy lainnya jika diperlukan } }
Di dalam method
run()
, Kita dapat menggunakan modelProduct
untuk memasukkan data dummy ke dalam tabelproducts
. - Buka file seeder yang baru dibuat di dalam direktori
-
Memanggil Seeder dari DatabaseSeeder (Opsional)
- Secara default, seeder-seeder yang ingin dijalankan secara otomatis oleh perintah
php artisan db:seed
terdaftar di dalamDatabaseSeeder
. Kita dapat memanggil seeder yang baru dibuat di dalamDatabaseSeeder.php
:
Buka file
DatabaseSeeder.php
di dalam direktoridatabase/seeders
dan tambahkan pemanggilan seederProductsTableSeeder
di dalam methodrun()
jika belum ada:public function run() { $this->call(ProductsTableSeeder::class); // Pemanggilan seeder-seeder lainnya jika ada }
- Secara default, seeder-seeder yang ingin dijalankan secara otomatis oleh perintah
-
Jalankan Seeder
- Setelah seeder selesai diisi dengan data dummy, Kita dapat menjalankan seeder menggunakan command Artisan berikut:
php artisan db:seed
Perintah di atas akan menjalankan semua seeder yang terdaftar di dalam
DatabaseSeeder
. Jika Kita ingin menjalankan seeder tertentu, Kita dapat menggunakan opsi--class
seperti ini:php artisan db:seed --class=ProductsTableSeeder
REST API Authentication dengan Laravel Sanctum
-
Setup Laravel Sanctum Package
composer require laravel/sanctum
-
Create AuthController
php artisan make:controller Api/AuthController
<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; class AuthController extends Controller { public function register(Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|string|max:255', 'email' => 'required|string|max:255|unique:users', 'password' => 'required|string|min:8' ]); if ($validator->fails()) { return response()->json($validator->errors()); } $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password) ]); $token = $user->createToken('auth_token')->plainTextToken; return response()->json([ 'data' => $user, 'access_token' => $token, 'token_type' => 'Bearer' ]); } public function login(Request $request) { if (! Auth::attempt($request->only('email', 'password'))) { return response()->json([ 'message' => 'Unauthorized' ], 401); } $user = User::where('email', $request->email)->firstOrFail(); $token = $user->createToken('auth_token')->plainTextToken; return response()->json([ 'message' => 'Login success', 'access_token' => $token, 'token_type' => 'Bearer' ]); } public function logout() { Auth::user()->tokens()->delete(); return response()->json([ 'message' => 'logout success' ]); } }
-
Definisikan Route
<?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! | */ Route::post('/register', [\App\Http\Controllers\Api\AuthController::class, 'register']); Route::post('/login', [\App\Http\Controllers\Api\AuthController::class, 'login']); Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); }); Route::middleware('auth:sanctum')->group(function () { Route::post('/logout', [\App\Http\Controllers\Api\AuthController::class, 'logout']); });
Membuat model di Laravel tanpa migrasi dan penggunaan model tersebut:
-
Buat Model
Pertama, buatlah model tanpa migrasi dengan perintah:php artisan make:model Product
-
Contoh Script dalam Model Product
Setelah membuat modelProduct
, berikut adalah contoh script di dalam model tersebut:<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Product extends Model { protected $table = 'products'; // Tentukan nama tabel yang sesuai protected $fillable = [ 'name', 'description', 'price', ]; // Tambahan method atau relasi sesuai kebutuhan }
$table
: Menentukan nama tabel yang terhubung dengan model ini.$fillable
: Menentukan kolom-kolom yang dapat diisi dengan mass assignment (pengisian secara masal), sehingga Kita bisa menggunakanProduct::create()
ataufill()
untuk mengisi model.- Kita juga dapat menambahkan method atau relasi lainnya sesuai kebutuhan aplikasi Kita di dalam model.
Langkah-langkah Pembuatan Validasi dengan Artisan
-
Gunakan Command Artisan
- Buka terminal atau command prompt, kemudian ketik perintah berikut:
php artisan make:request ProductRequest
Perintah ini akan membuat sebuah form request baru di dalam direktori
app/Http/Requests
dengan namaProductRequest
. -
Definisikan Aturan Validasi
- Buka file request yang baru dibuat di dalam direktori
app/Http/Requests
. Di dalam file ini, Kita akan menemukan methodrules()
yang digunakan untuk mendefinisikan aturan validasi untuk setiap field pada form.
Contoh penggunaan aturan validasi untuk form request
ProductRequest
:<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class ProductRequest extends FormRequest { public function authorize() { return true; // Sesuaikan dengan kebutuhan otorisasi Kita } public function rules() { return [ 'name' => 'required|string|max:255', 'description' => 'required|string', 'price' => 'required|numeric', ]; } }
Di dalam method
rules()
, Kita dapat mendefinisikan aturan validasi sepertirequired
,string
,numeric
,max
, dll., untuk setiap field yang ingin divalidasi. - Buka file request yang baru dibuat di dalam direktori
Langkah-langkah Pembuatan Controller dengan Artisan
-
Gunakan Command Artisan
- Buka terminal atau command prompt, kemudian ketik perintah berikut:
php artisan make:controller Api/ProductController --api
Command ini akan membuat sebuah controller bernama
ProductController
di dalam direktoriapp/Http/Controllers
. -
Implementasikan Fungsi CRUD dalam Controller
- Setelah controller dibuat, Kita dapat menambahkan fungsi-fungsi CRUD ke dalamnya. Berikut contoh struktur dasar dari
ProductController
:
<?php namespace App\Http\Controllers\Api; use Illuminate\Http\Request; use App\Http\Requests\ProductRequest; use App\Models\Product; // Import model Product class ProductController extends Controller { // Menampilkan semua produk public function index() { $products = Product::all(); return response()->json($products); } // Menampilkan detail produk berdasarkan ID public function show($id) { $product = Product::find($id); if (!$product) { return response()->json(['message' => 'Product not found'], 404); } return response()->json($product); } // Membuat produk baru public function store(ProductRequest $request) { $validatedData = $request->validated(); $product = Product::create($validatedData); return response()->json($product, 201); } // Mengupdate produk berdasarkan ID public function update(Request $request, $id) { $product = Product::find($id); if (!$product) { return response()->json(['message' => 'Product not found'], 404); } $validatedData = $request->validated(); $product->update($validatedData); return response()->json($product, 200); } // Menghapus produk berdasarkan ID public function destroy($id) { $product = Product::find($id); if (!$product) { return response()->json(['message' => 'Product not found'], 404); } $product->delete(); return response()->json(['message' => 'Product deleted'], 200); } }
Dalam masing-masing fungsi, kita dapat menambahkan logika bisnis yang sesuai, seperti pengambilan data dari model
Product
, validasi input, penyimpanan ke database, atau penghapusan data.Tabel yang berisi kode status HTTP beserta deskripsi lengkap dari masing-masing kode tersebut:
- Setelah controller dibuat, Kita dapat menambahkan fungsi-fungsi CRUD ke dalamnya. Berikut contoh struktur dasar dari
Kode Status | Arti | Deskripsi |
---|---|---|
100 | Continue | Server telah menerima permintaan awal dan klien harus melanjutkan ke permintaan berikutnya. |
101 | Switching Protocols | Server memahami permintaan klien dan akan beralih ke protokol yang diinginkan. |
200 | OK | Permintaan berhasil. Digunakan untuk respons standar yang berhasil. |
201 | Created | Permintaan berhasil dan sumber daya baru telah dibuat. |
204 | No Content | Server telah berhasil memproses permintaan tetapi tidak ada konten yang dikembalikan. |
300 | Multiple Choices | Ada beberapa pilihan yang tersedia, dan klien harus memilih di antara opsi tersebut. |
301 | Moved Permanently | Sumber daya yang diminta telah dipindahkan secara permanen ke lokasi baru yang disediakan dalam respons. |
304 | Not Modified | Sumber daya belum dimodifikasi sejak permintaan terakhir. |
400 | Bad Request | Server tidak dapat memahami permintaan karena sintaks yang salah atau tidak valid. |
401 | Unauthorized | Klien tidak memiliki otorisasi yang diperlukan untuk sumber daya tersebut. |
403 | Forbidden | Server memahami permintaan tetapi menolak untuk mengizinkan akses ke sumber daya. |
404 | Not Found | Sumber daya yang diminta tidak ditemukan pada server. |
500 | Internal Server Error | Terjadi kesalahan server yang tidak terduga yang menghentikan server dalam memproses permintaan. |
503 | Service Unavailable | Server tidak tersedia saat ini karena overload atau perbaikan. |
Kode status HTTP memberikan informasi tentang keberhasilan, kesalahan, atau kondisi khusus dari respons yang diberikan oleh server. Informasi ini sangat penting untuk menentukan bagaimana klien harus merespons terhadap permintaan yang dikirimkan ke server.
-
Registrasi Route untuk Controller
- Setelah pembuatan controller, pastikan untuk mendaftarkan rute yang sesuai di dalam file
routes/api.php
atauroutes/web.php
tergantung pada kebutuhan aplikasi kita. Berikut contoh penggunaanProductController
dalam definisi rute:
use App\Http\Controllers\Api\ProductController; Route::get('/products', [ProductController::class, 'index']); Route::get('/products/{id}', [ProductController::class, 'show']); Route::post('/products', [ProductController::class, 'store']); Route::put('/products/{id}', [ProductController::class, 'update']); Route::delete('/products/{id}', [ProductController::class, 'destroy']);
- Setelah pembuatan controller, pastikan untuk mendaftarkan rute yang sesuai di dalam file
Dengan langkah-langkah di atas merupakan contoh membuat controller ProductController
menggunakan Artisan di Laravel. Controller tersebut dapat digunakan untuk mengelola operasi CRUD (Create, Read, Update, Delete) terhadap model Product
.
Komentar
Posting Komentar