Golang: How To Create Simple gRPC

Reza Ramadhan Irianto
3 min readFeb 2, 2022

gRPC adalah framework RPC modern, open source, berperforma tinggi yang dapat berjalan di lingkungan apa saja. gRPC sendiri dibuat oleh Google. Disini kita tidak akan membahas apa itu gRPC secara mendalam kalian bisa baca saja di artikel ini.

Berbeda dengan Rest API yang pertukaran data menggunakan JSON/XML dan menggunakan HTTP/1. gRPC ini sendiri menggunakan HTTP/2 dan pertukaran data menggunakan Protobuf. Maka dari itu gRPC tidak dapat diakses oleh Web Browser karena menggunakan HTTP/2. gRPC sendiri diklaim lebih cepat 7 kali dalam menerima data dan 10 kali dalam mengirim data dibandingkan dengan Rest API.

Langsung saja kita mulai ke pembuatan gRPC di Golang. Sebelumnya kalian harus menginstall beberapa Go Plugins terlebih dahulu, kalian dapat melihatnya di grpc.io, atau jika ingin langsung ke intinya kalian bisa tulis code dibawah ini:

$ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1

Kode diatas berguna agar kita dapat generate dari kode Proto ke Golang. Setelah itu dalam projek yang kalian buat, buatlah directory dengan nama output. Didalam directory output itu kalian buat file dengan nama output.proto, lalu masukkan kode berikut:

Dalam kode diatas kita membuat menggunakan proto3, setelah itu ada 2 buah model bernama OutputRequest dan Output, karena dalam Proto kita tidak dapat mengirim parameter berbentuk tipe data primitif seperti string, int dan lain sebagainya. Maka dari itu kita membutuhkan model tambahan. Kita membuat field string dengan isi integer, dalam proto kita harus memiliki unique ketika membuat field dalam modelnya maka dari itu kita tambahkan 1, 2, dst. sedangkan untuk service itu adalah semacam function yang kita buat untuk pertukaran datanya. Sedangkan untuk google.protobuf.Empty adalah tipe data ketika kita melakukan return di Proto, karena di Proto, function yang kita miliki harus memiliki return value.

Setelah itu agar lebih mudah kita akan membuat file untuk run CMD, kita buat dengan nama MakeFile, dan tulis kode dibawah ini

gen:
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative output/output.proto

clean:
rm output/*.go

Kode yang pertama diatas itu berguna untuk generate Proto dan untuk yang kedua menghapus file generate Proto. Setelah kalian jalankan kode yang pertama, maka dalam directory output kalian akan muncul 2 file baru yaitu output_grpc.pb.go, dan output.pb.go.

Setelah melakukan generate Protobuf, kita akan membuat directory baru dengan nama client, lalu buat file client.go, dan masukkan kode berikut:

Disini kita menggunakan package main, agar bisa di run secara terpisah. Kita juga menggunakan address “localhost:8080” (alamat yang nantinya untuk server gRPC). Disini kita hanya mengirim Request: GOGOGO, yang nantinya akan diterima server dan diprint di server gRPCnya.

Setelah membuat client, kita buat directory baru dengan nama server, dan buat file server.go, lalu masukkan kode berikut:

Note: Abaikan errornya karena kita belum membuat model yang diperlukan.

Kode diatas hanya melakukan run gRPC di port 8080.

Setelah itu kita membuat file output_service_server.go, lalu masukkan kode dibawah ini:

Kode diatas berguna untuk implementasi function yang terdapat di Proto dan melakukan print terhadap data tersebut.

Oke setelah selesai semuanya kita dapat jalankan aplikasi kita yang didalam server.go dan client.go, jika semuanya berhasil dan tidak terjadi error maka kita akan melihat output berikut ketika menjalankan server.go dan client.go

--

--