38 poin oleh GN⁺ 2025-12-05 | Belum ada komentar. | Bagikan ke WhatsApp
  • JSON, yang telah menjadi standar untuk web API, mudah dibaca dan fleksibel, tetapi memiliki keterbatasan dalam hal performa dan stabilitas
  • Protobuf (Protocol Buffers) menjamin struktur data secara jelas melalui definisi tipe yang ketat dan pembuatan kode otomatis
  • Dengan menggunakan serialisasi biner, Protobuf dapat mengurangi ukuran data lebih dari sekitar 3x dan meningkatkan kecepatan transmisi dibanding JSON
  • Server dan klien berbagi skema .proto yang sama sehingga tidak ada ketidakcocokan tipe atau kebutuhan validasi manual
  • Walau lebih sulit untuk di-debug, Protobuf lebih cocok untuk API modern dari sisi performa, maintainability, dan efisiensi pengembangan

Universalitas dan Keterbatasan JSON

  • JSON adalah format teks yang mudah dibaca manusia, sehingga data bisa diperiksa hanya dengan console.log() sederhana
  • Berkat integrasi sempurna dengan web, JSON diadopsi luas di JavaScript dan berbagai framework backend
  • JSON menawarkan fleksibilitas untuk menambah, menghapus, atau mengubah tipe field dengan bebas, tetapi hal ini juga membuka kemungkinan ketidakcocokan struktur dan error
  • Karena ekosistem tooling-nya kaya, JSON bisa ditangani dengan mudah hanya menggunakan editor teks atau curl
  • Namun, terlepas dari keunggulan tersebut, ada alternatif yang lebih baik dalam hal performa dan type safety

Gambaran Umum Protobuf

  • Format serialisasi biner yang dikembangkan oleh Google pada 2001 dan dipublikasikan pada 2008
  • Digunakan secara luas di sistem internal dan komunikasi antar-microservice
  • Sering ada kesalahpahaman bahwa Protobuf harus dipakai bersama gRPC, padahal Protobuf juga bisa digunakan secara mandiri di HTTP API
  • Pada awalnya kurang mudah diakses karena format biner tidak terlihat langsung, tetapi Protobuf sangat unggul dari sisi efisiensi dan stabilitas

Sistem Tipe yang Kuat dan Pembuatan Kode

  • Protobuf mendefinisikan struktur data secara jelas melalui file .proto
    • Setiap field memiliki tipe ketat, identifier numerik, dan nama tetap
  • Contoh:
    message User {
      int32 id = 1;
      string name = 2;
      string email = 3;
      bool isActive = 4;
    }
    
  • Dengan perintah protoc, Protobuf mendukung pembuatan kode otomatis untuk banyak bahasa seperti Dart, TypeScript, Kotlin, Swift, C#, Go, dan Rust
  • Kode yang dihasilkan digunakan untuk serialisasi (writeToBuffer) dan deserialisasi (fromBuffer), sehingga validasi atau parsing manual tidak diperlukan
  • Hasilnya, menghemat waktu sekaligus meningkatkan maintainability

Efisiensi Serialisasi Biner

  • Protobuf diserialisasi sebagai data biner alih-alih teks, sehingga sangat ringkas dan cepat
  • Perbandingan ukuran untuk data yang sama (objek User):
    • JSON: 86 byte (68 byte jika spasi dihapus)
    • Protobuf: 30 byte
  • Penyebab efisiensinya:
    • Menggunakan encoding varint untuk angka
    • Menggunakan tag numerik, bukan key teks
    • Menghapus spasi dan sintaks yang tidak perlu
    • Optimasi field opsional
  • Hasilnya adalah penghematan bandwidth, respon lebih cepat, hemat data seluler, dan peningkatan pengalaman pengguna

Contoh API Protobuf Berbasis Dart

  • Menggunakan paket shelf untuk membuat HTTP server sederhana yang mengembalikan objek User dalam format Protobuf
  • Inti kode server:
    • Membuat objek User() lalu menserialisasikannya dengan writeToBuffer()
    • Menetapkan header respons 'content-type': 'application/protobuf'
  • Klien menggunakan paket http dan user.pb.dart untuk mendekode data Protobuf secara langsung
  • Karena server dan klien berbagi skema .proto yang sama, ketidakcocokan struktur data tidak terjadi
  • Pendekatan yang sama juga dapat diterapkan di Go, Rust, Kotlin, Swift, C#, dan TypeScript

Keunggulan JSON yang Masih Tersisa

  • Protobuf sulit dipahami maknanya tanpa skema
    • Karena yang terlihat hanya identifier angka, bukan nama field, format ini sulit dibaca manusia
  • Contoh perbandingan:
    • JSON: { "id": 42, "name": "Alice" }
    • Protobuf: 1: 42, 2: "Alice"
  • Karena itu, Protobuf memerlukan:
    • tool decoding khusus
    • manajemen skema dan versioning yang wajib
  • Meski begitu, keuntungan performa dan efisiensinya jauh lebih besar

Kesimpulan

  • Protobuf adalah teknologi serialisasi yang matang dan berperforma tinggi, serta cukup layak digunakan juga untuk API publik
  • Dapat berjalan mandiri di HTTP API biasa tanpa gRPC
  • Alat yang meningkatkan performa, robustness, pengurangan error, dan efisiensi pengembangan sekaligus
  • Untuk proyek generasi berikutnya, mengadopsi Protobuf sangat layak dipertimbangkan

Belum ada komentar.

Belum ada komentar.