Struktur Dasar Message
Disini kita akan perkenalkan struktur protobuf message. Menggunakan contoh message dibawah:
syntax = "proto3";
message MyMessage {
int32 id = 1;
string first_name = 2;
string last_name = 3;
}
Struktur dari message adalah, pertama kita harus mendefinisikan syntax yang digunakan.
syntax = "proto3";
Untuk mendefinisikan message, digunakan keyword message diikuti nama message. Block message diawali dengan { dan diakhir dengan }
message MyMessage {
}
Didalam block message, kita definisikan struktur data, dengan aturan penulisan tipeData nama_field = tag;
int32 id = 1;
Perhatian, setiap akhir baris digunakan tanda ; sebagai penunjuk akhir baris.
Tipe Data
Setelah kita paham struktur message, berikutnya kita akan bahas tipe data yang disupport.
Untuk tipe number, disupport cukup banyak, namun untuk kesederhanaan tutorial kita hanya bahas 3 saja.
- int32, untuk angka bulat, default value adalah 0.
- float (32bit), untuk angka decimal, default value adalah 0.
- double (64bit), untuk angka decimal, dengan presisi yang lebih tinggi, default value adalah 0.
- bool, untuk nilai true/false, default value adalah false.
- string, harus berisi UTF-8 encoded atau 7 bit-ASCII text. Default value adalah empty string.
- bytes, digunakan untuk menyimpan data byte array. Contoh file small image. Default value adalah empty bytes.
- repeated field (akan dibahas dibawah). Default value adalah empty list.
- enum (akan dibahas dibawah). Default value adalah first value.
Latihan
Buat message Person dengan field
- age, menggunakan int32.
- first name, menggunakan string.
- last name, menggunakan string.
- small picture, menggunakan bytes.
- profile verified, menggunakan bool.
- height, menggunakan float.
Solusi
syntax = "proto3";
message Person {
int32 age = 1;
string first_name = 2;
string last_name = 3;
bytes small_pict = 4;
bool is_verified = 5;
float height = 6;
}
Memahami Tags
Seperti yang sudah dibahas diatas, field akan didefinisikan dengan urutan tipeData nama_field = tag;
Untuk kebutuhan programming, kita perlu menggunakan nama field. Sementara protobuf akan menggunakan tag untuk mengidentifikasikan field.
Penulisan tag harus dimulai dari angka paling kecil, lalu incremental dimasing-masing field berikutnya.
Nilai tag paling kecil adalah 1, nilai tag paling besar adalah 536.870.911.
Tag dengan nilai 19000 – 19999 tidak dapat digunakan karena di reserved oleh Google untuk penggunaan khusus.
Tag dengan nilai 1 – 15 akan menggunakan 1 byte, jadi gunakan nilai tag tersebut untuk fields yang sering digunakan.
Tag dengan nilai 16-2047, akan menggunakan 2 bytes, gunakan untuk fields yang lebih jarang digunakan.
Menggunakan Repeated Fields
Untuk menggunakan array atau list pada message, digunakan konsep repeated fields.
List dapat memiliki minimal 0 element.
Kebalikan dari repeated adalah singular (kita tidak perlu menuliskannya).
Sebagai contoh, kita akan tambahkan list dari nomer telpon pada message Person yang sudah dibuat dilatihan diatas.
syntax = "proto3";
message Person {
int32 age = 1;
string first_name = 2;
string last_name = 3;
bytes small_pict = 4;
bool is_verified = 5;
float height = 6;
repeated string phone_numbers = 7;
}
Menambahkan comment
Salah satu kelebihan protobuf adalah, kita dapat menambahkan baris atau block comment. Yang tentu berguna untuk dokumentasi.
Mirip dengan penulisan comment pada javascript, digunakan
- // untuk baris comment
- /* */ untuk block comment
Berikut contoh penulisan comment yang valid pada message Person
/* Comment goes here
* Comment goes here */
syntax = "proto3";
// comment goes here
message Person {
int32 age = 1; // comment goes here
string first_name = 2;
string last_name = 3;
bytes small_pict = 4;
bool is_verified = 5;
float height = 6;
repeated string phone_numbers = 7;
}
Memahami Enums
Enum atau enumuration, digunakan jika Anda mengetahui seluruh kemungkinan value dari sebuah field.
Syntax dasar dari enum adalah seperti berikut:
enum nama_enum {
ENUM_VARIANT1 = 0;
ENUM_VARIANT2 = 1;
...
}
Perhatian, default value dari enum adalah variant enum pertama. Enum harus dimulai dengan tag 0.
Sebagai contoh, kita akan tambahkan enum eye color untuk message Person diatas. Kita akan menggunakan 3 warna, hitam, abu dan biru.
/* Comment goes here
* Comment goes here */
syntax = "proto3";
// comment goes here
message Person {
int32 age = 1; // comment goes here
string first_name = 2;
string last_name = 3;
bytes small_pict = 4;
bool is_verified = 5;
float height = 6;
repeated string phone_numbers = 7;
enum EyeColor {
UNKNOWN_EYE_COLOR = 0;
EYE_BLACK = 1;
EYE_GREY = 2;
EYE_BLUE = 3;
}
EyeColor eye_color = 8;
}
Sampai disini kita sudah mempelajari dasar-dasar dari protobuf message.