Promosi

    nfi kreatif

    Solusi Integrasi & Software Development

    • System & Web Architecture • Mobile App Development
    • Branding & Identity Strategy • Commercial Photography
    085156886259 LinkedIn: nfi kreatif
    Hubungi Kami
    BLANTERORBITv102

    4. Optimasi REST API Brook Framework dengan Kompresi Gzip/Deflate di Lazarus Pascal

    Juni 09, 2026
    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:

    PropertyNilai
    Pattern/barang_kompres
    MethodrmGet

    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:

    ParameterTanpa KompresiDengan Kompresi
    Ukuran DataBesarJauh lebih kecil
    BandwidthTinggiLebih hemat
    Kecepatan TransferNormalLebih cepat
    Beban JaringanLebih beratLebih 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/]