![]() |
| Hasil Testing Kompresi |
![]() |
| Hasil Testing Non Kompresi |
Menghemat Bandwidth dan Meningkatkan Performa REST API
Ketika membangun REST API menggunakan Brook Framework dan Lazarus Pascal, salah satu tantangan yang sering muncul adalah ukuran data JSON yang semakin besar seiring bertambahnya jumlah data. Hal ini sangat terasa pada aplikasi klinik, rumah sakit, apotek, inventory, maupun ERP yang mengirimkan ratusan hingga ribuan record dalam satu request.
Salah satu teknik sederhana namun sangat efektif untuk mengatasi masalah tersebut adalah mengaktifkan kompresi HTTP menggunakan Gzip atau Deflate.
Dengan fitur ini, data JSON akan dipadatkan terlebih dahulu sebelum dikirim ke client sehingga ukuran data yang melewati jaringan menjadi jauh lebih kecil.
Mengapa Kompresi Data Penting?
Misalnya sebuah endpoint mengirimkan 500 data barang dalam format JSON.
Tanpa kompresi:
Ukuran JSON: 500 KB
Transfer jaringan: 500 KB
Dengan kompresi Gzip:
Ukuran JSON terkompresi: sekitar 100–200 KB
Penghematan bandwidth: hingga 60%–80%
Keuntungan yang diperoleh:
✅ Transfer data lebih cepat
✅ Beban jaringan lebih ringan
✅ Penggunaan bandwidth lebih hemat
✅ Respons aplikasi Android dan Web lebih cepat
✅ Sangat cocok untuk sistem klinik, SIMRS, inventory, dan ERP
Membuat Endpoint Khusus dengan Kompresi
Sebagai contoh, kita akan membuat endpoint baru:
/barang_kompres
Endpoint ini memiliki fungsi yang sama dengan endpoint /barang, tetapi data yang dikirimkan akan dikompresi secara otomatis oleh Brook Framework.
Konfigurasi Router di Lazarus
Tambahkan route baru pada komponen:
BrookURLRouter1
Kemudian buat konfigurasi berikut:
| Property | Nilai |
|---|---|
| Pattern | /barang_kompres |
| Method | rmGet |
Selanjutnya buat event:
BrookURLRouter1Routes4Request
Implementasi Endpoint dengan Gzip
Brook Framework telah menyediakan dukungan kompresi secara native.
Kita hanya perlu mengaktifkan properti:
AResponse.Compression := True;
sebelum data dikirimkan ke client.
Berikut contoh implementasinya:
procedure TFormUtama.BrookURLRouter1Routes4Request(
ASender: TObject;
ARoute: TBrookURLRoute;
ARequest: TBrookHTTPRequest;
AResponse: TBrookHTTPResponse);
var
vNama, vKode: string;
vJSON: string;
JSONArray: TJSONArray;
JSONObject: TJSONObject;
vQueryLokal: TZQuery;
begin
if not IsAuthenticatedtoken(ARequest, AResponse) then
Exit;
if not ZConnectiondb.Connected then
ZConnectiondb.Connect;
vNama := ARequest.Params.Values['nama'];
vKode := ARequest.Params.Values['kode'];
JSONArray := TJSONArray.Create;
vQueryLokal := TZQuery.Create(nil);
try
vQueryLokal.Connection := ZConnectiondb;
vQueryLokal.SQL.Add(
'SELECT id_barang, nama_barang, harga, stok ' +
'FROM barang WHERE 1=1');
if vKode <> '' then
begin
vQueryLokal.SQL.Add('AND id_barang = :kode');
vQueryLokal.ParamByName('kode').AsString := vKode;
end;
if vNama <> '' then
begin
vQueryLokal.SQL.Add('AND nama_barang LIKE :nama');
vQueryLokal.ParamByName('nama').AsString :=
'%' + vNama + '%';
end;
vQueryLokal.SQL.Add('LIMIT 500');
vQueryLokal.Open;
while not vQueryLokal.EOF do
begin
JSONObject := TJSONObject.Create;
JSONObject.Add('id',
vQueryLokal.FieldByName('id_barang').AsInteger);
JSONObject.Add('nama',
vQueryLokal.FieldByName('nama_barang').AsString);
JSONObject.Add('harga',
vQueryLokal.FieldByName('harga').AsFloat);
JSONObject.Add('stok',
vQueryLokal.FieldByName('stok').AsInteger);
JSONArray.Add(JSONObject);
vQueryLokal.Next;
end;
vJSON := JSONArray.AsJSON;
// Aktifkan kompresi otomatis
AResponse.Compression := True;
AResponse.Send(
vJSON,
'application/json; charset=utf-8',
200
);
finally
vQueryLokal.Close;
vQueryLokal.Free;
JSONArray.Free;
end;
end;
Cara Pengujian Menggunakan ApacheBench
Untuk mengetahui seberapa besar manfaat kompresi, lakukan benchmark menggunakan ApacheBench (ab.exe).
Pengujian Tanpa Kompresi
C:\xampp\apache\bin\ab.exe ^
-n 100 ^
-c 10 ^
-H "Authorization: ismail" ^
http://localhost:8888/barang
Perhatikan hasil:
HTML transferred
Transfer rate
Pengujian Dengan Kompresi Gzip
Tambahkan header:
Accept-Encoding: gzip, deflate
Perintah benchmark:
C:\xampp\apache\bin\ab.exe ^
-n 100 ^
-c 10 ^
-H "Authorization: ismail" ^
-H "Accept-Encoding: gzip, deflate" ^
http://localhost:8888/barang_kompres
Analisis Hasil Benchmark
Biasanya hasil yang diperoleh menunjukkan:
| Parameter | Tanpa Kompresi | Dengan Kompresi |
|---|---|---|
| Ukuran Data | Besar | Jauh lebih kecil |
| Bandwidth | Tinggi | Lebih hemat |
| Kecepatan Transfer | Normal | Lebih cepat |
| Beban Jaringan | Lebih berat | Lebih ringan |
Pada dataset berukuran besar, pengurangan ukuran data dapat mencapai:
60% - 80%
bahkan lebih jika struktur JSON mengandung banyak teks yang berulang.
Studi Kasus di Dunia Nyata
Sebagai pengembang aplikasi klinik dan rumah sakit, saya sering menemukan endpoint yang mengirimkan:
Data pasien
Data rekam medis
Data obat
Data inventory
Master tarif layanan
Data laporan
Jumlah record yang dikirim bisa mencapai ribuan baris.
Dengan mengaktifkan kompresi Gzip, aplikasi Android, Web, maupun Desktop dapat menerima data lebih cepat tanpa perlu menambah spesifikasi server.
Teknik ini sangat direkomendasikan untuk:
Sistem Informasi Klinik
SIMRS
Inventory Management
ERP
POS
Mobile Apps
REST API berbasis Brook Framework
Kesimpulan
Mengaktifkan kompresi Gzip/Deflate pada Brook Framework merupakan optimasi sederhana yang memberikan dampak besar terhadap performa aplikasi.
Hanya dengan satu baris kode:
AResponse.Compression := True;
Anda dapat:
Mengurangi penggunaan bandwidth hingga 80%
Mempercepat pengiriman data JSON
Mengurangi beban jaringan
Meningkatkan pengalaman pengguna aplikasi
Jika Anda sedang mengembangkan REST API menggunakan Lazarus Pascal dan Brook Framework, fitur ini layak menjadi standar pada endpoint yang mengirimkan data dalam jumlah besar.
[Link GitHub : https://github.com/mailhasan/rest_api_sqlite/]


0 komentar