API (Application Programming Interface) merupakan sekumpulan aturan dan protokol yang memungkinkan aplikasi berbeda platform untuk berkomunikasi dan saling terintegrasi.
Penggunaan API begitu penting karena berfungsi sebagai media komunikasi antar aplikasi yang berbeda. Dalam era digital saat ini, hampir semua aplikasi modern menggunakan API untuk:
Ilustrasi penggunaan API dapat dilihat pada gambar berikut:
Komponen-komponen utama API adalah sebagai berikut:
RESTful API (Representational State Transfer) adalah arsitektur untuk merancang web services. REST bukanlah sebuah protokol atau standar, melainkan seperangkat prinsip desain.
RESTful API memungkinkan dua sistem komputer berkomunikasi secara aman dan efisien melalui internet dengan mengikuti prinsip arsitektur REST, yaitu:
Dalam RESTful API, setiap sumber daya diidentifikasi melalui URI dan dimanipulasi menggunakan metode HTTP
seperti GET, POST, PUT, dan DELETE. Representasi data
biasanya dalam format JSON atau XML. Karena server tidak menyimpan status klien
antar permintaan, desain ini menjadikan RESTful API ringan, mudah dipelajari, dan sangat cocok untuk aplikasi
web maupun mobile modern.
Langkah-Langkah
Berikut adalah langkah-langkah untuk menerapkan RESTful API pada project Laravel menggunakan POSTMAN.
Pada tutorial ini, kita akan membuat sebuah project CRUD sederhana menggunakan Laravel. Buat sebuah project Laravel baru atau gunakan project Laravel yang sudah ada (pada tutorial ini kita akan membuat project Laravel baru dan akan membuat project CRUD sederhana).
Pertama, buat migrasi databasenya. Untuk membuat migrasi, gunakan kode berikut di terminal:
php artisan make:migration create_products_table
Lalu, masukkan kode ini ke dalam fungsi up():
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('description');
$table->decimal('price', 10, 2);
$table->integer('stock');
$table->timestamps();
});
Langkah berikutnya adalah menjalankan proses migrasi agar tabel products terbentuk di database. Gunakan perintah berikut pada terminal:
php artisan migrate
Setelah migrasi berhasil dijalankan, buat model Product yang akan mewakili data produk di dalam aplikasi. Jalankan perintah berikut:
php artisan make:model Product
Selanjutnya, buka file Product yang telah dibuat dan isi dengan kode berikut:
class Product extends Model
{
protected $fillable = [
'name', 'description', 'price', 'stock'
];
protected $casts = [
'price' => 'decimal:2'
];
}
Kemudian, untuk mulai menyiapkan rute API dalam project Laravel, jalankan perintah berikut di terminal:
php artisan install:api
Selanjutnya, buka file routes/api.php dan tambahkan kode rute berikut untuk mendefinisikan endpoint-endpoint API:
Route::apiResource('products', ProductController::class);
// Rute manual (opsional jika ingin eksplisit)
Route::get('products', [ProductController::class, 'index']);
Route::post('products', [ProductController::class, 'store']);
Route::get('products/{product}', [ProductController::class, 'show']);
Route::put('products/{product}', [ProductController::class, 'update']);
Route::delete('products/{product}', [ProductController::class, 'destroy']);
Setelah rute API dibuat, langkah selanjutnya adalah membuat controller bernama ProductController dengan menjalankan perintah berikut di terminal:
php artisan make:controller ProductController --api
Setelah itu, isi file ProductController.php dengan kode berikut:
class ProductController extends Controller
{
public function index()
{
$products = Product::all();
return response()->json([
'status' => 'success',
'data' => $products
]);
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'description' => 'required|string',
'price' => 'required|numeric|min:0',
'stock' => 'required|integer|min:0'
]);
$product = Product::create($validated);
return response()->json([
'status' => 'success',
'message' => 'Product created successfully',
'data' => $product
], 201);
}
public function show(Product $product)
{
return response()->json([
'status' => 'success',
'data' => $product
]);
}
public function update(Request $request, Product $product)
{
$validated = $request->validate([
'name' => 'sometimes|string|max:255',
'description' => 'sometimes|string',
'price' => 'sometimes|numeric|min:0',
'stock' => 'sometimes|integer|min:0'
]);
$product->update($validated);
return response()->json([
'status' => 'success',
'message' => 'Product updated successfully',
'data' => $product
]);
}
public function destroy(Product $product)
{
$product->delete();
return response()->json([
'status' => 'success',
'message' => 'Product deleted successfully'
]);
}
}
Selanjutnya, buat sebuah API Resource yang berfungsi untuk mengubah data model atau collection menjadi format JSON yang terstruktur dan mudah dikustomisasi. API Resource ini akan menjadi penghubung antara model Eloquent dan response API yang dikirim ke client.
Dengan menggunakan resource, dapat:
Jalankan perintah berikut di terminal untuk membuat resource bernama ProductResource:
php artisan make:resource ProductResource
Setelah resource berhasil dibuat, langkah berikutnya adalah mengisi file ProductResource.php dengan kode berikut untuk mengatur struktur data JSON yang akan dikirim ke client:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class ProductResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'description' => $this->description,
'price' => $this->price,
'stock' => $this->stock,
'created_at' => $this->created_at->format('Y-m-d H:i:s'),
'updated_at' => $this->updated_at->format('Y-m-d H:i:s')
];
}
}
Untuk menggunakan ProductResource yang telah dibuat, kita bisa memodifikasi method index() dan show() di dalam ProductController. Dengan cara ini, setiap response akan otomatis menggunakan format JSON yang sudah didefinisikan di resource.
Berikut adalah contoh kodenya:
use App\Http\Resources\ProductResource;
use App\Models\Product;
public function index()
{
$products = Product::all();
return ProductResource::collection($products);
}
public function show(Product $product)
{
return new ProductResource($product);
}
Selanjutnya, tambahkan validasi input dan penanganan error. Laravel menyediakan fitur Form Request Validation yang memisahkan logika validasi dari controller agar lebih bersih dan terstruktur.
Untuk membuat file validasi khusus, jalankan perintah berikut di terminal:
php artisan make:request StoreProductRequest
Setelah perintah dijalankan, Laravel akan membuat file StoreProductRequest.php di direktori app/Http/Requests. Selanjutnya, isi file tersebut dengan kode berikut untuk menetapkan aturan validasi dan pesan error kustom:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreProductRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|string|max:255',
'description' => 'required|string',
'price' => 'required|numeric|min:0',
'stock' => 'required|integer|min:0'
];
}
public function messages()
{
return [
'name.required' => 'Nama produk wajib diisi',
'price.min' => 'Harga tidak boleh negatif'
];
}
}
Agar aplikasi dapat memberikan respons JSON yang konsisten saat terjadi error seperti validasi gagal atau data tidak ditemukan, sesuaikan file app/Exceptions/Handler.php. Tambahkan kode berikut pada method render():
public function render($request, Throwable $exception)
{
if ($request->wantsJson()) {
if ($exception instanceof ValidationException) {
return response()->json([
'status' => 'error',
'message' => 'Validation failed',
'errors' => $exception->errors()
], 422);
}
if ($exception instanceof ModelNotFoundException) {
return response()->json([
'status' => 'error',
'message' => 'Resource not found'
], 404);
}
}
return parent::render($request, $exception);
}
Untuk mengakses dan menguji API yang telah dibuat, gunakan aplikasi bernama Postman. Aplikasi ini memungkinkan untuk melakukan request HTTP (seperti GET, POST, PUT, DELETE) dengan mudah, serta melihat response-nya secara langsung.
tambahan, jika ingin membuat REST API sederhana secara lokal untuk percobaan, bisa menggunakan json-server. Install terlebih dahulu json-server menggunakan perintah berikut:
npm install -g json-server
Jika proses instalasi json-server berhasil, kamu bisa mengeceknya dengan menjalankan perintah berikut di terminal atau command prompt:
json-server --version
Jika berhasil, maka akan muncul versi json-server yang terinstal, contohnya seperti ini:
Setelah Postman berhasil diunduh, gunakan untuk mengakses dan menguji API Laravel yang telah dibuat sebelumnya.
Unduh Postman melalui link resmi berikut: https://www.postman.com/downloads/
Sebelum mengakses API melalui Postman, pastikan telah menjalankan web server Laravel dengan perintah berikut di terminal:
php artisan serve
Setelah itu, di aplikasi Postman, untuk mengambil semua products, gunakan URL berikut
URL: http://127.0.0.1:8000/api/products
Method: GET
Jika berhasil, maka tampilan Postman akan seperti berikut:
Mengapa URL yang diperlukan adalah api/products, bukan hanya /products? Karena, route kita berada di file api.php sehingga Laravel secara otomatis akan menambahkan prefix /api pada setiap route yang dibuat di file tersebut.
Namun, jika kita memindahkan route API tadi ke dalam file web.php, maka URL-nya akan berubah menjadi:
http://127.0.0.1:8000/products (tanpa prefix /api).
Kemudian, coba ambil sebuah produk berdasarkan ID. Caranya dengan menggunakan URL berikut di Postman:
misal: http://localhost:8000/api/products/1
pakai Method: GET
Hasilnya akan seperti berikut:
Jika ingin menampilkan kode eror saat ID tidak ditemukan, tambahkan kode berikut:
public function show($id)
{
$product = Product::find($id);
if (!$product) {
return response()->json([
'status' => 'error',
'message' => 'Resource not found'
], 404);
}
// If the product is found, return the ProductResource
return new ProductResource($product);
}
Hasilnya akan seperti berikut:
Selanjutnya, untuk update data gunakan URL berikut di Postman:
misal: http://localhost:8000/api/products/1
pakai Method: PUT
Selanjutnya untuk mendelete sebuah data, gunakan URL berikut di Postman:
misal: http://localhost:8000/api/products/1
pakai Method: DELETE
Hasilnya akan menjadi seperti berikut:
Project ini tersedia di GitHub berikut: