# gRPC Code Generation with Protocol Buffer

## How stubs are Generated

* Untuk membuat stubs yang digunakan komunikasi antar server maka kita harus membuat **API Contracts**&#x20;
* API Contracts
  * Service dan payload message yang didefinisikan dengan menggunakan Protocol Buffer
* Server dan client akan di generate secara otomatis dengan menggunakan
  * Protocol Buffer complier (protoc)
  * gRPC plugins yang ada di setiap Bahasa Pemrograman

![example generated stubs](https://4184784299-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdF90Xe9F63MiAMEQ6k%2F-MdFndItuWj0fUu4lH2p%2F-MdFsDKBCCTfH2kPAaKj%2FScreenshot%20from%202021-06-28%2011-29-01.png?alt=media\&token=2b7a46e4-fc30-4764-9d82-cbc287950b79)

```sql
syntax = "proto3";

message HelloRequest { string name = 1; }

message HelloResponse { string greet = 1; }

service WelcomeService {
  rpc Hello(HelloRequest) returns (HelloResponse) {};
}
```

## Why gRPC uses Protocol Buffer

* Human-readable Interface Definition Language ( IDL )
* Programming languages interoperable:
  * Code generators untuk banyak bahasa pemrograman
* &#x20;Binary data representation :
  * smaller size ( ukuran yang kecil )
  * faster to transport ( cepat untuk dipindahkan antar server )
  * Lebih efisien untuk serialize / deserialize
* Strongly typed contract
* Conventions for API evolution
  * Backward & forward compatibility
* Pilihan alternatif selain gRPC
  * Google flatbuffers
  * Microsoft bond

![](https://4184784299-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdF90Xe9F63MiAMEQ6k%2F-MdFtrCdaRnAmQCWzWq3%2F-MdFuUQQ70XI-I0_ZWXj%2FGroup%202.png?alt=media\&token=f975d12c-5c32-4fa4-84c1-284c97dffb24)

## What Languages are Supported by gRPC

* 10 officially supported languages
  * Pure implementations: Go, Java, NodeJS
  * Wrap C-gRPC core: C/C++, C#, Objective-C, Python, Ruby, Dart, PHP

![](https://4184784299-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdF90Xe9F63MiAMEQ6k%2F-MdFx3JvWiM6gdX8DoDc%2F-MdFxB8HPUAVBA29Iwab%2FScreenshot%20from%202021-06-28%2011-50-32.png?alt=media\&token=79ca7481-b746-45d2-99f5-4013970ceb2d)
