Belajar pasal gRPC

# Kenapa belajar pasal gRPC?
Dalam persediaan untuk _interview_ dengan sebuah syarikat _startup_ ni, _recruiter_ suruh aku baca pasal gRPC. Mungkin dalam syarikat _startup_ ni, gRPC digunakan

# Apa itu gRPC?
Ia sebuah _framework_ untuk komunikasi antara _microservice_ yang berlainan bahasa.

Selama ni aku hanya pernah guna REST API untuk menghubungkan
_microservice_ dengan _microserice_, atau
_microservice_ dengan _frontend_.

Rupanya, gRPC ini dianggap sebagai cara perhubungan baru yang sedikit demi sedikit akan menggantikan REST API.

# Jap, hang belum cerita lagi apa mende gRPC ni
gRPC ni singkatan untuk _Google Remote Procedure Call_.
Daripada namanya kita tahu, ia adalah versi _Google_ untuk _Remote Procedure Call_. RPC ni rupanya sebuah _framework_ yang dah lama dicipta, malah sebelum REST API lagi, iaitu pada tahun 1970an. REST API dicipta pada 1997. gRPC pula pada 2015.

RPC dianggap sudah tak digunapakai pada masa sekarang. gRPC dikatakan lebih pantas daripada REST API. Namun, gRPC belum digunapakai secara meluas kerana ia mengambil lebih banyak masa untuk diimplementasi ke dalam kod. Menurut penulis [**blog ini**](https://blog.dreamfactory.com/grpc-vs-rest-how-does-grpc-compare-with-traditional-rest-apis/) , beliau cuma perlukan 10 minit untuk mengimplementasi REST API ke dalam kodnya, berbanding 45 minit untuk gRPC.

# Apa yang membuat gRPC lebih baik?
gRPC membolehkan sesebuah data dalam _microservice_ diubah ke dalam bentuk _byte_ sebelum dihantar ke _microservice_ yang lain. Hal ini berbeza dengan REST API yang memanfaatkan JSON, sebuah format berbentuk teks yang tentunya bersaiz lebih besar berbanding data berbentuk _byte_.

# Bagaimana gRPC mengubah data _microservice_ ke dalam bentuk byte?
gRPC dilengkapi sebuat _compiler_ bernama _protoc_ yang bertanggungjawab mengubah data dalam _microservice_ ke dalam bentuk _byte_ dan sebaliknya.

Mungkin sedikit sukar untuk dijelaskan dalam beberapa ayat, tapi saya cuba juga.
Begini, gRPC memanfaatkan apa yang dipanggil format _Protocol buffer_, di mana sesebuah unit data diisytiharkan dalam bentuk _service_ dan _message_. Pengisytiharan ini dibuat dalam sebuah fail teks yang berakhir dengan nama _.proto_. Fail ini diletakkan di dalam projek _microservice_. Kemudian, menggunakan _protoc_, kita akan hasilkan fail dalam bahasa yang sama dengan _microservice_ kita, yang membolehkan kita memanipulasi data tersebut di dalam projek kita. Ok, selesai sudah bahagian menghubungkaitkan data gRPC dengan data dalam _microservice_.

Untuk bahagian penghantaran/penerimaan data dari sebuah _microservice_ yang mengimplementasi gRPC kepada sebuah _microservice_ lain yang juga mengimplementasi gRPC, ia dijalankan sama seperti _client_ dan _server_ dalam kes REST API. (Tidaklah 100% sama, kerana gRPC juga membolehkan pemulaan penghantaran dua hala, manakala REST API hanya membolehkan pemulaaan penghantaran data dibuat oleh _client_ sahaja).

Oleh kerana data yang dihantar melalui gRPC ini berbentuk _byte_, ia boleh dimampatkan supaya data penghantaran lebih ringan dan cepat. Sebut pasal kecepatan penghantaran, gRPC dikendali di bawah protokol HTTP2. Berbanding HTTP1.1 yang digunakan untuk REST API, HTTP2 menyebabkan data dihantar dalam bentuk binari, dan bukan teks. Ini malah menyumbang kepada kelajuan gRPC lagi.

# Rumusan
Ada banyak perkara yang saya belum sentuh mengenai gRPC dalam entri ini. Mungkin dalam kupasan berikut, saya akan terangkan lebih lanjut, misalnya tentang bagaimana implementasi gRPC berbanding REST API.